2016-02-29 13 views
5

Sto usando R per scovare un tavolo da this site.Web scraping il sito Web basato su IIS

Sto utilizzando la libreria 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/") 

ricevo questo errore:

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

Che cosa sto facendo di sbagliato?

+0

Vedere [https://en.wikipedia.org/wiki/HTTP_403](https://en.wikipedia.org/wiki/HTTP_403). Non è necessariamente la fine della strada, ma certamente un posto di blocco. – alistaire

risposta

0

vostro formato per read_html o html è corretto:

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

Ma stai ricevendo un 403 perché o la pagina o la parte della pagina che si sta cercando di raschiare non consente raschiatura.

Potrebbe essere necessario per vedere e utilizzare vignette("selectorgadget") selectorgadget in combinazione con rvest:

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

Ma, più probabilmente, non è solo una pagina che è destinata ad essere raschiato. Tuttavia, ritengo che Barack Obama e il nuovo Chief Scientist degli Stati Uniti, DJ Patil, abbiano recentemente lanciato uno central hub per ottenere quel tipo di dati governativi statunitensi per un'importazione facile.

+0

'? Html':" 'html' è deprecato: per favore usa' read_html() 'invece." – alistaire

+0

_please_ non utilizzare IMDB come esempio di riferimento per lo scraping.Stai chiedendo al 100% alla gente di essere immorale e sottoponendoli a potenziali azioni legali. Non mi interessa se le vignette Pkg o RStudio lo usano. È sbagliato. – hrbrmstr

+0

@hrbrmstr Questa è una dichiarazione piuttosto radicale per non dare alcun ragionamento dietro di esso. Per non parlare del fatto che sono aperti a scaricare i loro dati per l'analisi e fornire discariche in testo semplice e che i loro ingegneri hanno aiutato le persone con i loro robot IMDB. Dicono che non gli dispiacerà raschiare, ma i robot rotti che non fanno un buon lavoro ne causano mal di testa. –

10

È forbidding you dall'accesso alla pagina perché hai NULL nella stringa user-agent delle intestazioni. (. Normalmente è una stringa dicendo che browser che si sta utilizzando, anche se alcuni browser consentono agli utenti di spoof altri browser) Usando il pacchetto httr, è possibile impostare una stringa 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]])')) 

Avvolto in una richiesta GET, add_headers lascia imposti i parametri che ti piacciono È inoltre possibile utilizzare la funzione più specifica user_agent al posto di add_headers, se è tutto ciò che si desidera impostare.

In questo caso qualsiasi stringa user-agent funzionerà, ma è educata (vedere il collegamento alla fine) per dire chi sei e cosa vuoi.

Ora è possibile utilizzare rvest per analizzare l'HTML e tirare fuori la tabella. Avrai bisogno di un modo per selezionare la tabella pertinente; guardando l'HTML, ho visto che aveva class = "DataTable", ma puoi anche usare SelectorGadget (vedi le vignette rvest) per trovare un selettore CSS o XPath valido. Così

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

ti dà un bello (se non totalmente pulito) data.frame.

Nota: Raschiare in modo responsabile e legale. Dato che l'OPM è una fonte governativa, è di dominio pubblico, ma non è il caso di gran parte del web. Leggere sempre tutti i termini di servizio, più this nice post on how to scrape responsibly.

Problemi correlati