【问题标题】:Web scraping, unable to target a table网页抓取,无法定位表
【发布时间】:2021-04-10 18:37:44
【问题描述】:

我在尝试以嵌入式表为目标来收集第二组链接时遇到问题。这是一个令人尴尬的简单任务。

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

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

我遵循了一些不同的指南和问题来尝试解决这个问题,但我一直碰壁。我一直希望通过 rvest/xml2/httr/jsonlite 软件包套件来实现这一点,但我仍然不相信我需要 RSelenium。

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

方法 1。

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)

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

【问题讨论】:

    标签: r web-scraping rvest


    【解决方案1】:

    看起来目标表存储为 JSON 文件,使用浏览器中的开发人员工具查找地址,然后直接下载文件更容易。
    在开发人员工具中,转到网络选项卡,过滤 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)
    

    【讨论】:

    • 谢谢你的作品!但是现在我不得不问,您使用的是开发者工具的哪一部分?我为此使用 chrome 87,如果我将页面视为“元素”样式,或者使用 ctrl + shift + c 我看到了上面包含的信息(appr 2 &3);使用 SelectorGadget 得到了类似的结果。
    • @steppe,我编辑了答案以提供有关如何查找文件的更多详细信息。每个浏览器对相同的功能都有不同的命名法,我不太清楚 Chrome 是怎么说的。
    • stackoverflow.com/questions/27326573/… 在这个问题中添加一个带有 chrome 过程图像的帖子,该过程与 Dave2e 描述的过程几乎相同。确保“过滤器”框为空 - 我的已缓存“.infobox”,在这种情况下,感兴趣的表在“瀑布”上具有最大的 x 轴。
    猜你喜欢
    • 2015-12-14
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    相关资源
    最近更新 更多