2016-02-29 71 views
5

我正在使用R来抓取this site中的一张表。我正在使用库rvestWeb抓取基于IIS的网站

#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.

我在做什么错?

+0

请参阅[https://en.wikipedia.org/wiki/HTTP_403](https://en.wikipedia.org/wiki/HTTP_403)。这不一定是路的尽头,但肯定是路障。 – alistaire

回答

0

您的read_htmlhtml格式是正确的:

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/

但更可能的是,它只是不说的意思是刮的页面。然而,我相信巴拉克奥巴马和新美国首席数据科学家DJ Patil最近推出了central hub以获得这种类型的美国政府数据以便于导入。

+0

'?html':''html'已弃用:请使用'read_html()'代替。“ – alistaire

+0

_please_不要将IMDB用作刮擦的参考示例。你百分之百要求人们不道德,并让他们接受潜在的法律诉讼。我不在乎是否pkg vignettes或RStudio使用它。这是不对的。 – hrbrmstr

+0

@hrbrmstr这是一个非常激进的声明,因为它没有给出任何推理。更不用说他们愿意将他们的数据下载用于分析并提供纯文本转储,并且他们的工程师已经帮助人们使用他们的IMDB机器人。他们说他们不介意刮胡子,但那些没有做好它的破坏的机器人会导致头痛。 –

10

这是forbidding you访问页面,因为您的头文件中有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() 

给你一个很好的(如果不是完全干净的)data.frame。

注意:负责任地和合法地刮擦。鉴于OPM是政府资源,它属于公有领域,但许多网络并非如此。请务必阅读任何服务条款,外加this nice post on how to scrape responsibly.