Web抓取基于IIS的网站

Fey*_*rov 5 r web-scraping

我正在使用R从这个站点 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/")
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

open.connection(x,"rb")出错:HTTP错误403.

我究竟做错了什么?

ali*_*ire 10

禁止您访问该页面,因为您NULLuser-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]])'))
Run Code Online (Sandbox Code Playgroud)

包含在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()
Run Code Online (Sandbox Code Playgroud)

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

注意:负责任和合法地刮.鉴于OPM是政府来源,它属于公共领域,但对于很多网络来说情况并非如此.总是阅读任何服务条款,加上关于如何负责任地抓取的好帖子.


Hac*_*k-R 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/")
Run Code Online (Sandbox Code Playgroud)

但是您会收到 403 错误,因为您尝试抓取的页面或页面的一部分不允许抓取。

vignette("selectorgadget")您可能需要结合 rvest查看和使用选择器小工具:

http://blog.rstudio.org/2014/11/24/rvest-easy-web-scraping-with-r/

但是,更有可能的是,这并不是一个应该被抓取的页面。然而,我相信巴拉克·奥巴马 (Barack Obama) 和新任美国首席数据科学家 DJ Patil 最近推出了一个中央枢纽来获取此类美国政府数据,以便轻松导入。