【发布时间】:2018-10-19 17:28:31
【问题描述】:
我正在尝试从一个站点 (thenumbers.com) 中抓取数据,该站点的数据跨越多个网页。顺序网页的格式是这样的(下面只是前三个):
url0 <- "https://www.the-numbers.com/box-office-records/domestic/all-movies/cumulative/all-time"
url1 <- "https://www.the-numbers.com/box-office-records/domestic/all-movies/cumulative/all-time/101"
url2 <- "https://www.the-numbers.com/box-office-records/domestic/all-movies/cumulative/all-time/201"
要将第一个连续的 url (url0) 抓取到 df 中,此代码将返回正确的输出。
library(rvest)
webpage <- read_html("https://www.the-numbers.com/box-office-records/domestic/all-movies/cumulative/all-time")
tbls <- html_nodes(webpage, "table")
head(tbls)
tbls_ls <- webpage %>%
html_nodes("table") %>%
.[1] %>%
html_table(fill = TRUE)
df <- tbls_ls[[1]]
输出的样子:
> head(df)
Rank Released Movie DomesticBox Office
1 1 2015 Star Wars Ep. VII: The Force Awakens $936,662,225
2 2 2009 Avatar $760,507,625
3 3 2018 Black Panther $700,059,566
如何自动抓取后续 url,直到我们到达数据的末尾,以便输出是一个很长的 df,它已经被rowbind()ed 在一起?
【问题讨论】:
-
在每个页面的底部都有一个
<div>与class="pagination"分类,并带有指向下一个n页面的链接。从第一页开始,抓取表格和分页信息并迭代直到没有更多链接。 SO上有很多这样的例子(一些最近的) -
顺便说一句,虽然the-numbers.com/robots.txt 没有对此路径实施技术控制,但有一点道德的人应该阅读the-numbers.com/research-analysis 并至少捐赠(甚至是1.00 美元),如果他们'重新使用数据。
-
@hrbrmstr 很高兴您指出了指向我的链接,我会做出贡献
-
FWIW 我实际上练习了我在 abt 上喋喋不休的内容。我制作了 OMDB API 包 — github.com/hrbrmstr/omdbapi — 并且可以显示 patreon 每月收据 1.00 美元,尽管我个人在不教授高级 R 课程时从不使用 API(而且我过去没有教过这个) 3 个学期)。
标签: r web-scraping rvest