【问题标题】:Webscraping data from Familysearch.org using R使用 R 从 Familysearch.org 抓取数据
【发布时间】:2015-11-17 13:45:37
【问题描述】:

我正在尝试使用 R(更具体地说是 rvest 包)在 familySearch.org(请参阅下面的 URL)上抓取巴西记录表。

拳头用“selctor gadget”选择了网站上的表格。根据我单击选择器的方式返回:“#hr-data-table”或“td”。它们似乎都不起作用:

library(rvest)
url <- 'https://familysearch.org/search/record/results?count=75&englishSubcountryName=Brasil&query=%2Brecord_country%3ABrazil%20%2Brecord_subcountry%3A'
url %>% html() %>%  html_node("#hr-data-table") %>% html_text()

Error in xml_apply(x, XML::xmlValue, ..., .type = character(1)) : 
  Unknown input of class: NULL

url %>% html() %>%  html_node("td") %>% html_text()

[1] ""

#replacing html_text() with html_table() also does not work. 

关于如何完成这项工作的任何想法,最好是在 R 中?

【问题讨论】:

    标签: r web-scraping rvest


    【解决方案1】:

    将此作为非回答的答案来说明它比评论允许的更多。


    该站点使用 XHR 请求来动态填充表格。您需要使用 selenium (RSelenium) 或调出开发人员工具并查看正在发出的请求(在调出开发工具或 firebug 或您的浏览器具有的任何内容后重新加载网站)。

    这是表格数据的 XHR 请求的“复制为 cURL”版本:

    curl 'https://familysearch.org/search/records?count=75&query=%2Brecord_country%3ABrazil' 
      -H 'Cookie: fs_experiments=u%3D-anon-%2Ca%3Dshared-ui%2Cs%3D4ad72a2f25d45cd9ae7c92e412c176e5%2Cv%3D010011001101000000011111111100111010110100001010000110011000110001011000000010011000000%2Cb%3D82%26a%3Dhome%2Cs%3D32f8f352ce4eaac984ab4a66aca8f354%2Cv%3D1101100110000110000000000100110011101%2Cb%3D19%26a%3Dcampaign%2Cs%3D296f4e3066991d8e9584fd6eb21e8c7c%2Cv%3D0101011111110010110001111%2Cb%3D34%26a%3Dsearch%2Cs%3D7acb79194da98cdfc4a29ecf17854668%2Cv%3D1111111110011110111111111111111101000000000000000000%2Cb%3D83; fs_search_history=https%3A//familysearch.org/search/record/results%3Fcount%3D75%26englishSubcountryName%3DBrasil%26query%3D%252Brecord_country%253ABrazil%2520%252Brecord_subcountry%253A' 
      -H 'Accept-Encoding: gzip, deflate, sdch'
      -H 'Accept-Language: en-US,en;q=0.8' 
      -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36' 
      -H 'Content-Type: application/json' 
      -H 'Accept: */*' 
      -H 'Referer: https://familysearch.org/search/record/results?count=75&englishSubcountryName=Brasil&query=%2Brecord_country%3ABrazil%20%2Brecord_subcountry%3A' 
      -H 'X-Requested-With: XMLHttpRequest' 
      -H 'Connection: keep-alive' 
      --compressed
    

    可能需要其中的部分或全部。您必须对其进行测试。

    很明显,他们有一个 API 为网站提供动力,因此您可能需要考虑编写它们以查看您是否可以获得非官方/私有 API 的副本并以这种方式使用它而不是抓取(抓取通常会带来更多比 API 调用加载到服务器上)。

    您可以针对私有 API 调用要求进行分类,也可以使用 RSelenium 来“点击并抓取”渲染的 DOM 元素。

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多