在 JavaScript 启用时使用 R 从网页获取所有搜索结果
Using R to get all search results from webpage when it's JavaScript enabled
我是网络抓取的新手,我正在尝试使用 R 从以下网站获取搜索结果:
https://devtracker.fcdo.gov.uk/sector/1/projects
很容易得到第一页的结果,例如使用
library(rvest)
library(V8)
link <- 'https://devtracker.fcdo.gov.uk/sector/1/projects'
devtracker = read_html(link)
searchresults = devtracker %>% html_nodes(xpath = '//div[@class="search-result"]//a',) %>% html_attr('href')
但我无法从后续页面获得结果。一开始我以为我会找到下一页的link,然后跟着它,一页一页地得到搜索结果。在浏览器中查看 html 代码,它看起来是以下行:
pages = devtracker %>% html_nodes(xpath = "//div[@class='six columns']//ul//li",)
应该会找到 link 到其他页面,但是这个 returns 是一个空节点集。我知道这与使用 JavaScript 作为页面列表的页面有关,我尝试在这个博客之后使用 V8:https://www.r-bloggers.com/2017/11/scraping-javascript-rendered-web-content-using-r/ 但不知道如何使用它来显示下一页结果。
新手有没有一种简单的方法可以从该页面获取所有搜索结果?
可能有更好的选择。对 HTTP 请求的快速检查显示 HTML 是从 JSON 数据呈现的,您可以直接访问:
https://devtracker.fcdo.gov.uk/api/activities/?hierarchy=1&page_size=200&format=json&reporting_organisation_identifier=GB-GOV-15,GB-GOV-9,GB-GOV-6,GB-GOV-2,GB-GOV-1,GB-1,GB-GOV-3,GB-GOV-13,GB-GOV-7,GB-GOV-50,GB-GOV-52,GB-6,GB-10,GB-GOV-10,GB-9,GB-GOV-8,GB-GOV-5,GB-GOV-12,GB-COH-RC000346,GB-COH-03877777&fields=activity_dates,aggregations,activity_status,id,iati_identifier,url,title,reporting_organisation,activity_plus_child_aggregation,descriptions&activity_status=2&ordering=-activity_plus_child_budget_value&total_hierarchy_budget_gte=&total_hierarchy_budget_lte=&actual_start_date_gte=&planned_end_date_lte=§or=&related_activity_sector=11110,11120,11130,11182,11220,11230,11240,11320,11330,11420,11430,11231,11232,11321,11322,&recipient_country=&recipient_region=&document_link_category=&participating_organisation=&page=1&format=json
您可以更改 page_size
和 page
参数以在一个请求中获取所有内容,然后使用 jsonlite
或类似的包进行解析。
我是网络抓取的新手,我正在尝试使用 R 从以下网站获取搜索结果:
https://devtracker.fcdo.gov.uk/sector/1/projects
很容易得到第一页的结果,例如使用
library(rvest)
library(V8)
link <- 'https://devtracker.fcdo.gov.uk/sector/1/projects'
devtracker = read_html(link)
searchresults = devtracker %>% html_nodes(xpath = '//div[@class="search-result"]//a',) %>% html_attr('href')
但我无法从后续页面获得结果。一开始我以为我会找到下一页的link,然后跟着它,一页一页地得到搜索结果。在浏览器中查看 html 代码,它看起来是以下行:
pages = devtracker %>% html_nodes(xpath = "//div[@class='six columns']//ul//li",)
应该会找到 link 到其他页面,但是这个 returns 是一个空节点集。我知道这与使用 JavaScript 作为页面列表的页面有关,我尝试在这个博客之后使用 V8:https://www.r-bloggers.com/2017/11/scraping-javascript-rendered-web-content-using-r/ 但不知道如何使用它来显示下一页结果。
新手有没有一种简单的方法可以从该页面获取所有搜索结果?
可能有更好的选择。对 HTTP 请求的快速检查显示 HTML 是从 JSON 数据呈现的,您可以直接访问:
https://devtracker.fcdo.gov.uk/api/activities/?hierarchy=1&page_size=200&format=json&reporting_organisation_identifier=GB-GOV-15,GB-GOV-9,GB-GOV-6,GB-GOV-2,GB-GOV-1,GB-1,GB-GOV-3,GB-GOV-13,GB-GOV-7,GB-GOV-50,GB-GOV-52,GB-6,GB-10,GB-GOV-10,GB-9,GB-GOV-8,GB-GOV-5,GB-GOV-12,GB-COH-RC000346,GB-COH-03877777&fields=activity_dates,aggregations,activity_status,id,iati_identifier,url,title,reporting_organisation,activity_plus_child_aggregation,descriptions&activity_status=2&ordering=-activity_plus_child_budget_value&total_hierarchy_budget_gte=&total_hierarchy_budget_lte=&actual_start_date_gte=&planned_end_date_lte=§or=&related_activity_sector=11110,11120,11130,11182,11220,11230,11240,11320,11330,11420,11430,11231,11232,11321,11322,&recipient_country=&recipient_region=&document_link_category=&participating_organisation=&page=1&format=json
您可以更改 page_size
和 page
参数以在一个请求中获取所有内容,然后使用 jsonlite
或类似的包进行解析。