我正在使用R从this site进行webscrape表格。
我正在使用库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/")
我收到此错误:
open.connection(x,“rb”)出错:HTTP错误403。
我做错了什么?
答案 0 :(得分:10)
访问该网页时forbidding you,因为您的标头的NULL
字符串中有user-agent
。 (通常它是一个字符串,告诉您正在使用的浏览器,但有些浏览器允许用户欺骗其他浏览器。)使用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()
给你一个很好的(如果不是完全干净的)data.frame。
注意:负责任地和合法地进行刮擦。鉴于OPM是政府来源,它属于公共领域,但对于很多网络来说情况并非如此。请务必阅读任何服务条款以及this nice post on how to scrape responsibly.
答案 1 :(得分:0)
read_html
或html
的格式正确无误:
library(rvest)
lego_movie <- read_html("http://www.imdb.com/title/tt1490017/")
lego_movie <- html("http://www.imdb.com/title/tt1490017/")
但是你得到的是403,因为你试图刮擦的页面或页面部分都不允许抓取。
您可能需要查看vignette("selectorgadget")
并将selectorgadget与rvest:
http://blog.rstudio.org/2014/11/24/rvest-easy-web-scraping-with-r/
但是,更有可能的是,它不是一个意图被刮掉的页面。但是,我相信巴拉克•奥巴马(Barack Obama)和新任美国首席数据科学家DJ Patil最近推出central hub来获取这类美国政府数据,以便于进口。