从404错误清除中刮取URL中的数据

时间:2018-05-27 18:53:03

标签: r web-scraping rvest

我试图从网页上抓取数据,但是下面的网址出现了404错误。但是,我需要在浏览器中提供404链接的数据。这是一个例子:

library(tidyverse)
library(rvest)

url <- "http://www.uscho.com/scoreboard/division-i-men/20172018/composite-schedule/"

link_list <- url %>%
  read_html() %>%
  html_nodes("td:nth-child(13) a") %>%
  html_attr("href") %>%
  {paste0("http://www.uscho.com", .)}

现在,例如,在您的网络浏览器中搜索此处的第200个示例(http://www.uscho.com/recaplink.php?gid=1_970_20172018)。你会得到这个:

enter image description here

我实际上并不想要404错误,但在地址栏中,有一个网址 - 经过一些操作后 - 我可以用来获取我想要的实际网页({{1 }})

然而,此网址并未显示在R.正在运行"https://www.uscho.com/recaps/?p=171810970",我只收到404错误。

我知道如何从R中的浏览器中获取URL?

1 个答案:

答案 0 :(得分:0)

要使用rvest从R中的浏览器获取网址,您可以搜索元数据:

library(rvest)
library(tidyverse)

url <- "https://stackoverflow.com/questions/50555460/scrape-data-in-url-from-404-error-scrape"
url %>%
  read_html() %>%
  html_nodes(xpath = '//meta[@property="og:url"]') %>%
  html_attr('content')
#[1] "https://stackoverflow.com/questions/50555460/scrape-data-in-url-from-404-error-scrape"

然而,这不足以满足您的需求。我认为使用RSelenium动态抓取数据会更好。它可能会更慢,但它肯定是解决您的问题的方法。您可以查看this tutorial了解如何操作。

修改 splashr并没有真正体验,但我知道RSeleniumrvest不同,因为Selenium会模拟而rvest依赖于RESTful API。当收到404时,它会崩溃,而Selenium可以通过等待setImplicitWaitTimeout()来忽略,以便页面重定向。然后,您可以使用remoteDriver$getCurrentUrl()

获取捕获的网址