Web抓取基于IIS的网站

时间:2016-02-29 02:18:02

标签: r web-scraping

我正在使用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。

我做错了什么?

2 个答案:

答案 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_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/

但是,更有可能的是,它不是一个意图被刮掉的页面。但是,我相信巴拉克•奥巴马(Barack Obama)和新任美国首席数据科学家DJ Patil最近推出central hub来获取这类美国政府数据,以便于进口。