【发布时间】:2020-09-01 06:59:35
【问题描述】:
我有一些使用rvest 包从网络上抓取我需要的数据的经验,但是我遇到了这个页面的问题:
https://www.nytimes.com/interactive/2020/us/covid-college-cases-tracker.html
如果您向下滚动一点,您会看到所有学校所在的部分。
我想要学校、案例和位置数据。我应该注意到有人在NYT GitHub 上询问将其发布为 csv 并且他们recommended that the data is all in the page and can just be pulled from there. 因此,我认为从这个页面上抓取是可以的。
但我无法让它工作。假设我只想从第一所学校的简单选择器开始。我使用检查器来查找 xpath。
我没有得到任何结果:
library(rvest)
URL <- "https://www.nytimes.com/interactive/2020/us/covid-college-cases-tracker.html"
pg <- read_html(URL)
# xpath copied from inspector
xpath_first_school <- '//*[@id="school100663"]'
node_first_school <- html_node(pg, xpath = xpath_first_school)
> node_first_school
{xml_missing}
<NA>
我收到{xml_missing}。
不知不觉我还有很多事情要做来概括这一点并为所有人收集数据 学校,但是对于网络抓取,我通常尝试从简单而具体的开始,然后扩大范围。但即使我的简单测试也不起作用。有什么想法吗?
【问题讨论】:
-
我查看了网站,甚至查看了浏览器 devtools 网络流量,但似乎没有一种简单的方法可以获取数据。也就是说,当调用
read_html(甚至html_session)时,学校数据似乎不存在。然后在 http 对话中的某个时间点对其进行更新。但是,js、json或plain连接似乎都没有包含您正在寻找的数据,所以我怀疑他们非常小心:您可以在网页上看到数据,但是它们使得以编程方式抓取变得困难。 -
虽然它很麻烦而且并非没有缺陷,但我怀疑一种前进的方式(因为 ha
rvesting 它“简单地”对我不起作用)是尝试使用 @987654338 进行无头浏览器设置@。这有点出乎我的意料,但也许这会给你一些想法。 -
@r2evans,谢谢。 There is a site 显示如何使用
RSelenium和rvest来获取此数据。我会对此进行研究,然后可能会发布作为答案。感谢您查看并确认我不只是未能使用更简单的方法! -
过去我推荐
RSelenium太快了,可能是因为我达到了 的阈值“在合理的时间内无法通过rvest找到它“ ...所以不要完全放弃它..我所做的一切(tbh)是为Birmingham(其中一所学校,没有找到)或合理的所有下载(这三种类型的)grep - 可能指示非 json 数据源的 URL(查找nyt.com,只找到图像和新闻元数据)。我的猜测是它在js代码中被稍微混淆了......祝你好运,尼克。 -
r2evans,如果你想知道的话,@KKW,我在这方面与 Selenium 争论了一段时间,然后找到了一个解决方案,它允许我们读取页面的文本并解析一些 JSON。不是一个非常普遍的解决方案,但它确实可以解决这个问题。
标签: r web-scraping rvest