【问题标题】:Scrape data in URL from 404 error-scrape从 404 错误抓取中抓取 URL 中的数据
【发布时间】:2018-05-27 18:53:03
【问题描述】:

我正在尝试从网页中抓取数据,但是我收到以下 URL 的 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)。你会得到这个:

我实际上并不想要 404 错误,但在地址栏中,有一个 URL——经过一些操作——我可以用来获取我想要的实际网页 ("https://www.uscho.com/recaps/?p=171810970")

但是,此 URL 不会显示在 R 中。运行 read_html(link_list[200]),我只会收到 404 错误。

知道如何在 R 中从浏览器获取 URL 吗?

【问题讨论】:

  • 如果您已经找到该模式。您可以使用搜索参数 ?p=**** 将相同的模式应用于其他搜索
  • 什么意思?老实说,我仍然不确定确切的模式是什么
  • 哦,我以为你已经知道这种模式了。您是否尝试过测试您发现的模式?
  • 是的,我已经尝试了一些方法,看看是否可以避免问这个问题,但似乎没有一个简单的模式
  • 似乎某些链接已过期、更改或删除,并且未在该表上更新。您可以根据该网站的结构尽力猜测实际链接。但我认为没有更好的方法。

标签: r web-scraping rvest


【解决方案1】:

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

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()获取捕获的URL

【讨论】:

  • 感谢您的回复。不过,使用RSelenium 会有什么帮助?我使用splashr,类似于RSelenium,但我仍然不确定如何捕获URL
  • 编辑了我的答案,否则这将是一个很长的评论
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 2019-08-20
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
相关资源
最近更新 更多