网页抓取,无法定位表格

时间:2021-01-05 00:26:15

标签: r web-scraping rvest

我在尝试定位嵌入式表以收集第二组链接时遇到问题。这是一项非常简单的任务。

网站:https://irma.nps.gov/DataStore/Reference/Profile/2233469 虽然他们有其他产品的 API,但这些数据不包括在内......(我有一个密钥 - 附加到 URL 的末尾 - 如果需要,但它似乎不会影响此类页面)。< /p>

我要做的是复制表中包含的所有链接。或者下载整个表的内容并将其转换为 R 中的数据帧(我已经用更简单的表实现了这一点)。我不应该对那部分有困难!虽然,我也相信我可以很容易地破解这张桌子......

我遵循了一些不同的指南和问题来尝试解决这个问题,但我一直在碰壁。我一直希望使用 rvest/xml2/httr/jsonlite 套件套件来完成此任务,但仍然不相信我需要 RSelenium。

page <- read_html('https://irma.nps.gov/DataStore/Reference/Profile/2233469')

方法一。

app1 <- html_nodes(page, "body")
app1 <- app1[[1]]
app1 <- app1 %>% html_attr('href')

我尝试了几种方法来从这里获取数据,但常见的方法似乎失败了,例如html_table 等

方法 2.(格式不佳)

  app2 <- page %>% 
     html_nodes(xpath = '//*[(@id = 
    "digitalResourcesGrid-body")]') %>% 
  html_attr('href')

方法 3。

app3 <- page %>% html_nodes('div.x-grid-view x-fit-item x-grid-view-default') 
app3 <- app3 %>% html_nodes("a")  
app3 <- xml_text(app3)

我在不同的函数上尝试了十几种排列,但都没有成功。每种方法都在过程中的某个地方失败,但似乎这些方法中的任何一种理论上都应该有效?
任何首先成功定位此表的帮助将不胜感激,我确实认为只要我可以访问它,我就可以获得我想要的东西。

1 个答案:

答案 0 :(得分:1)

看起来目标表存储为JSON文件,使用Web浏览器中的开发人员工具查找地址然后直接下载文件更容易。
在开发人员工具中,转到网络选项卡,过滤 XHR 文件并重新加载网页。应该列出几个文件,查看每个文件以找到包含所需信息的文件。右键单击该文件以复制其 URL。

library(jsonlite)
webpagetable <- fromJSON("https://irma.nps.gov/DataStore/Reference/GetHoldings?_dc=1609810155944&referenceId=2233469&page=1&start=0&limit=25&sort=%5B%7B%22property%22%3A%22DisplayOrder%22%2C%22direction%22%3A%22ASC%22%7D%2C%7B%22property%22%3A%22HoldingType%22%2C%22direction%22%3A%22ASC%22%7D%2C%7B%22property%22%3A%22Description%22%2C%22direction%22%3A%22ASC%22%7D%5D")

head(webpagetable)