我正在抓取一个网页,该网站在页面上有大量的下拉项目,这些项目会更改我正在抓取的表格中的值。 URL由下拉值决定,我能够创建一个我想要抓取的所有URL的向量。该向量采用以下形式:
vectorsURL = c("http:www.mywebsite.com/page1/stats.html",
"http:www.mywebsite.com/page2/stats.html",
"http:www.mywebsite.com/page3/stats.html",
"http:www.mywebsite.com/page4/stats.html",
"http:www.mywebsite.com/page5/stats.html",
"http:www.mywebsite.com/page6/stats.html")
完整的向量相当长,25,000个URL。我目前用于抓取所有这些页面的方法如下,其中包含一些我正试图养成的管道:
all_data = c()
for(i in 1:length(vectorsURL)) {
my_URL = vectorsURL[i]
scraped_page = my_URL %>%
read_html() %>%
html_nodes('table') %>%
extract(3) %>%
html_table() %>%
as.data.frame()
all_data = rbind(all_data, scraped_page)
}
每页大约2秒,对于25000页,这将花费13-14小时。我想知道是否可以使用应用函数更快地完成此操作。我尝试使用以下方式使用lapply(我在仅50个URL的子集上测试了这个),使用以下代码:
b = lapply(temp, FUN = function(x) x %>% read_html() %>% html_nodes('table') %>% extract(3) %>% html_table() %>% as.data.frame())
然而,这种方法需要大约100秒,这与for循环一样长。任何关于加快这一点的想法都将受到高度赞赏,即使它涉及R中的进一步并行化以便在更短的时间内读取更多页面。谢谢!