2016-02-29 8 views
5

Ich verwende R zu webscrape eine Tabelle von this site.Web-Scraping der IIS-basierten Website

Ich benutze Bibliothek 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/") 

erhalte ich diesen Fehler:

Error in open.connection(x, "rb") : HTTP error 403.

Was mache ich falsch?

+0

Siehe [https://en.wikipedia.org/wiki/HTTP_403](https://de.wikipedia.org/wiki/HTTP_403]. Es ist nicht unbedingt das Ende der Straße, aber sicherlich eine Straßensperre. – alistaire

Antwort

0

Ihr Format für read_html oder html ist richtig:

library(rvest) 
lego_movie <- read_html("http://www.imdb.com/title/tt1490017/") 
lego_movie <-  html("http://www.imdb.com/title/tt1490017/") 

Aber Sie bekommen ein 403, da entweder die Seite oder den Teil der Seite, die Sie zu kratzen sind versucht, Schaben nicht gestattet.

Sie müssen möglicherweise vignette("selectorgadget") und verwenden selectorgadget in Verbindung mit rvest sehen:

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

Aber wahrscheinlicher ist, es ist einfach nicht eine Seite, die geschabt zu werden ist gemeint. Ich glaube jedoch, dass Barack Obama und der neue US-amerikanische Chief Data Scientist, DJ Patil, kürzlich eine central hub eingeführt haben, um diese Art von US-Regierungsdaten für den einfachen Import zu erhalten.

+0

'? Html':" 'html' ist veraltet: Verwenden Sie stattdessen' read_html() '." – alistaire

+0

_please_ Verwenden Sie IMDB nicht als Referenzbeispiel für Scraping.Sie fragen 100% Leute unmoralisch und unterwerfen sie möglichen gerichtlichen Maßnahmen. Es ist mir egal, ob pkg vignettes oder RStudio es benutzt. Es ist falsch. – hrbrmstr

+0

@hrbrmstr Das ist ein ziemlich radikales Statement dafür, dass es keine Gründe gibt. Ganz zu schweigen davon, dass sie offen dafür sind, dass ihre Daten zur Analyse heruntergeladen werden und Klartext-Dumps zur Verfügung gestellt werden, und ihre Ingenieure haben Menschen mit ihren IMDB-Bots geholfen. Sie sagen, dass es ihnen nichts ausmacht zu kratzen, aber gebrochene Bots, die nicht gut machen, verursachen Kopfschmerzen. –

10

Es ist forbidding you vom Zugriff auf die Seite, weil Sie NULL in der user-agent Zeichenfolge Ihrer Header haben. (. Es ist normalerweise eine Zeichenfolge zu sagen, welchen Browser Sie verwenden, obwohl einiger Browser Benutzer lassen fälschen anderen Browser) Mit dem httr Paket können Sie eine user-agent Zeichenfolge festgelegt:

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]])')) 

Eingehüllt in einer GET Anfrage add_headers lassen Sie setzen die Parameter, die Sie mögen. Sie könnten auch die spezifischere user_agent Funktion anstelle von add_headers verwenden, wenn das alles ist, was Sie einstellen möchten.

In diesem Fall funktioniert jeder String user-agent, aber es ist höflich (siehe den Link am Ende) zu sagen, wer du bist und was du willst.

Jetzt können Sie rvest verwenden, um das HTML zu analysieren und die Tabelle herauszuziehen. Sie müssen eine Möglichkeit haben, die relevante Tabelle auszuwählen. Beim Betrachten des HTML sah ich, dass es class = "DataTable" hatte, aber Sie können auch das SelectorGadget (siehe Vignetten rvest) verwenden, um einen gültigen CSS- oder XPath-Selektor zu finden. Also

x %>% 
    read_html() %>% 
    html_node('.DataTable') %>% 
    html_table() 

gibt Ihnen einen schönen (wenn nicht völlig sauber) data.frame.

Hinweis: Kratzen verantwortungsbewusst und rechtlich. Angesichts der Tatsache, dass OPM eine staatliche Quelle ist, ist es in der Öffentlichkeit, aber das ist nicht der Fall mit einem Großteil des Webs. Lesen Sie immer die Nutzungsbedingungen, plus this nice post on how to scrape responsibly.