我正在使用R从本站上抓取一张桌子。
我正在使用库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。
我做错了什么?
发布于 2016-02-29 04:25:36
这是访问页面的禁止你,因为头部的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是一个政府来源,它是在公共领域,但这不是对许多网络的情况。总是阅读任何服务条款,加上这篇关于如何负责任的文章。
发布于 2016-02-29 02:52:30
您的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/
但是,更有可能的是,这不是一页注定要被刮掉的东西。不过,我相信巴拉克·奥巴马和新任美国首席数据科学家DJ·帕蒂尔(DJ Patil )最近推出了一款中央枢纽,以获取这类美国政府数据,以便于输入。
https://stackoverflow.com/questions/35690914
复制相似问题