2016-02-29 72 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.