【问题标题】:Web Scraping multiple Links using R使用 R 抓取多个链接
【发布时间】:2017-12-24 05:46:53
【问题描述】:

我正在开发一个网络抓取程序,以从多个工作表中搜索数据。下面的代码是我正在使用的示例。我只能得到第一张纸。如果有人能指出我的语法哪里出错了,那将是非常有帮助的。

jump <- seq(1, 10, by = 1)

site <- paste0("https://stackoverflow.com/search?page=",jump,"&tab=Relevance&q=%5bazure%5d%20free%20tier")


dflist <- lapply(site, function(i) {
   webpage <- read_html(i)
  draft_table <- html_nodes(webpage,'.excerpt')
  draft <- html_text(draft_table)
})



finaldf <- do.call(cbind, dflist) 

finaldf_10<-data.frame(finaldf)

View(finaldf_10)

下面是我需要从中抓取数据的链接 127 页。

[https://stackoverflow.com/search?q=%5Bazure%5D+free+tier][1]

根据上面的代码,我只能从第一页获取数据,而不能从其余页面获取数据。也没有语法错误。你能帮我找出我哪里出错了。

【问题讨论】:

  • 您不需要使用do.call(rbind, dflist) 代替do.call(cbind, dflist) 吗?此外,最好包含对问题的描述(根据您的说法)并包含可能的错误消息或不正确的输出。
  • 类似问题的一个例子:stackoverflow.com/questions/40525661/…
  • @Jaap 问题在 dflist 循环中
  • 我认为您需要在dflist 中添加额外的一行:return(draft)(或只是draft
  • 我已按照您的建议添加了 return(darft)。请参阅下面的修改后的代码,但我仍然没有得到输出。请建议。 dflist

标签: r web-scraping lapply rvest


【解决方案1】:

一些网站设置了安全措施来防止批量抓取。我猜SO就是其中之一。更多信息:https://github.com/JonasCz/How-To-Prevent-Scraping/blob/master/README.md

事实上,如果你稍微延迟你的电话,这会奏效。我已经尝试了 5 秒 Sys.sleep。我想你可以减少它,但这可能不起作用(我尝试了 1 秒 Sys.sleep,但没有用)。

这是一个工作代码:

library(rvest)
library(purrr)

dflist <- map(.x = 1:10, .f = function(x) {
  Sys.sleep(5)
  url <- paste0("https://stackoverflow.com/search?page=",x,"&q=%5bazure%5d%20free%20tier")
  read_html(url) %>%
    html_nodes('.excerpt') %>%
    html_text() %>%
    as.data.frame()
}) %>% do.call(rbind, .)

最好的,

科林

【讨论】:

  • 这很有帮助。非常感谢..这正是我想要的。
  • 总是乐于提供帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多