r - 基于 IIS 的网站的网页抓取

标签 r web-scraping

我正在使用 R 从 this site 中抓取表格.

我正在使用库rvest

#install.packages("rvest", dependencies = TRUE) 
library(rvest) 
OPMpage <- read_html("https://www.opm.gov/policy-data-oversight/data-analysis-documentation/federal-employment-reports/historical-tables/total-government-employment-since-1962/")

我收到此错误:

Error in open.connection(x, "rb") : HTTP error 403.

我做错了什么?

最佳答案

这是 forbidding you无法访问该页面,因为 header 的 user-agent 字符串中有 NULL。 (通常它是一个字符串,告诉您正在使用的浏览器,尽管有些浏览器允许用户欺骗其他浏览器。)使用 httr 包,您可以设置一个 user-agent 字符串:

library(httr)
library(rvest)

url <- "https://www.opm.gov/policy-data-oversight/data-analysis-documentation/federal-employment-reports/historical-tables/total-government-employment-since-1962/"

x <- GET(url, add_headers('user-agent' = 'Gov employment data scraper ([[your email]])'))

封装在 GET 请求中,add_headers 允许您设置您喜欢的任何参数。如果您只想设置的话,您还可以使用更具体的 user_agent 函数来代替 add_headers

在这种情况下,任何 user-agent 字符串都可以使用,但有礼貌的是(请参阅最后的链接)说明您是谁以及您想要什么。

现在您可以使用 rvest 解析 HTML 并提取表格。您需要一种方法来选择相关表;查看 HTML,我看到它有 class = "DataTable",但您也可以使用 SelectorGadget(请参阅 rvest 小插图)来查找有效的 CSS 或 XPath 选择器。因此

x %>% 
    read_html() %>% 
    html_node('.DataTable') %>% 
    html_table()

给你一个漂亮的(如果不是完全干净的)数据框架。

注意:负责任且合法地进行抓取。鉴于 OPM 是政府来源,因此它属于公共(public)领域,但很多网络的情况并非如此。请务必阅读任何服务条款,加上 this nice post on how to scrape responsibly.

关于r - 基于 IIS 的网站的网页抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690914/

相关文章:

python - 如何在 Python 中有效地将字符串类型的数据框列转换为日期时间?

r - 轻松在 GitHub 上查找 R 包

r - 计算组内类别的比例

jquery cheerio 遍历一组元素

java - 无需 API 的第三方网站抓取

替换数据帧中的 NULL

r - R 统计环境上的尾递归

javascript - 使用 Python 抓取 Meteor

javascript - 抓取页面以获取编码的 javascript 链接

java - Jsoup Java For 循环和元素