2016-05-01 14 views
0

Ich muss http://www.bls.gov/schedule/schedule/2007/2007_sched.htm für jedes Datum scrape, das "die Beschäftigungssituation" in der Spalte "Release Name" enthält. Die Web-Verschrottung ausgegeben werden soll:Web Scrape von Klartext in R

Jan. 5, Feb. 2, 2007, March 9, April 6, May 4, June 1, 2007 
July 6, 2007, Aug. 3, Sept. 7, Oct. 5, Nov. 2, 2007, Dec. 7 
#year can be ignored/omitted 

Um das gleiche für http://www.bls.gov/schedule/news_release/2015_sched.htm zu erreichen verwendet die folgenden:

library(rvest) 
pg <- read_html("http://www.bls.gov/schedule/news_release/2015_sched.htm") 

# target only <td> elements under bodytext div 
body <- html_nodes(pg, "div#bodytext") 

# use this new set of nodes and a relative XPath to get initial <td> elements, then get their siblings 
es_nodes <- html_nodes(body, xpath=".//td[contains(., 'Employment Situation for')]/../td[1]") 

# clean up and make dates 
nfpdates <- as.Date(trimws(html_text(es_nodes)), format="%A, %B %d, %Y") 

dass die Liste der Termine unter nfpdates gespeichert. Ich habe versucht, diesen Code für http://www.bls.gov/schedule/schedule/2007/2007_sched.htm arbeiten und fehlgeschlagen. Das Problem ist, dass diese zwei URLs die Informationen in verschiedenen Formaten speichern. Wie können die Daten aus dieser URL extrahiert werden, da die Informationen im Klartext und nicht in einer HTML-Tabelle gespeichert sind? Vielen Dank.

Antwort

1

Dies ist nicht die vollständige Lösung, aber es zieht die angeforderten Zeilen mit "Die Beschäftigungssituation" von der Webseite. Der Text, den Sie anfordern, ist dem Pre-Tag zugeordnet. Auf dieser Seite befinden sich 4 Abschnitte (Abschnitte 3 & 4 sind leer).

library(rvest) 
url <- "http://www.bls.gov/schedule/schedule/2007/2007_sched.htm" 
body<-html_nodes(read_html(url), "pre") 
#text= xml_text(body[1]) #only uses the first table 
text= sapply(1:length(body), function(i) {xml_text(body[i])}) #looks at all tables 
#create one list for all the captured lines 
table1<-unlist(strsplit(text, "\n")) 
#find lines that match the search string 
employ<-table1[grepl("The Employment Situation", table1)] 

Das Endergebnis ist:

[1] "Die Beschäftigungslage, Dezember 2006 5. Januar \ t 08.30 \ r"
[2] „Die Beschäftigungslage, Januar 2007 \ TFEB. 2, 2007 \ t 08.30 \ r“

...

an dieser Stelle ist es eine Frage der Verwendung von strsplit, gsub, grep c lehne dich auf und isoliere den Wunschtext von jeder Zeile. Wenn Sie immer noch Probleme haben, vielleicht eine andere Stackoverflow Frage, die sich darauf konzentriert, die Daten aus jeder Zeile zu extrahieren. Viel Glück.