Die Tabelle, die mich interessiert, ist die Wikipedia-Tabelle von Michelin-Sterne-Restaurants in NYC, und die Anzahl der Sterne ausgezeichnet wird durch Bilder angezeigt.Scraping Wikipedia HTML-Tabelle mit Bildern, Text und leere Zellen mit R
konnte ich die Tabelle mit zwei Schritten kratzen (zuerst die Worte in dem „Namen“ und „Borough“ Spalten erhalten, zweite die Alt-Tags in der Tabelle Körper bekommen), aber ich mag wissen, ob es in einem Schritt gemacht werden kann. Ich war in der Lage, die Daten mit dem Rettungspaket zu kratzen.
Da Wikipedia-Seiten nicht von der XML :: readHTMLTable-Funktion gelesen werden können, habe ich das hmttab-Paket ohne Glück versucht, weil ich die Funktion für das bodyFun-Argument nicht herausfinden konnte. Um ehrlich zu sein, ich bin ein Neuling für Web Scraping ... und funktioniert.
Fragen, die ich als Referenz genannt:
Scraping html table with images using XML R package
Scraping html tables into R data frames using the XML package
Hier ist mein Code:
library(stringr)
library(rvest)
library(data.table)
url <- "http://en.wikipedia.org/wiki/List_of_Michelin_starred_restaurants_in_New_York_City"
#Scrape the first two columns, restaurant name and borough
name.boro <- url %>% read_html() %>% html_nodes("table") %>% html_table(fill = TRUE)
name.boro <- as.data.table(name.boro[[1]])
name.boro[, 3:length(name.boro) := NULL]
135 * 13 #1,755 cells in first table
#scrape tables for img alt
#note that because I used the "td" node, entries for all cells in all tables were pulled
stars <- url %>% read_html() %>% html_nodes("td") %>% html_node("img") %>% html_attr("alt")
stars
#Make vector of numbers to index each column
df <- vector("list", 13)
for (i in 1:13){
df[[i]] <- seq(i, 1755, 13)
}
#Put everything together
Mich.Guide <- name.boro
Mich.Guide[, c("X2006", "X2007", "X2008", "X2009", "X2010", "X2011", "X2012", "X2013", "X2014", "X2015",
"X2016") := .(stars[unlist(df[3])], stars[unlist(df[4])], stars[unlist(df[5])],
stars[unlist(df[6])], stars[unlist(df[7])], stars[unlist(df[8])],
stars[unlist(df[9])], stars[unlist(df[10])], stars[unlist(df[11])],
stars[unlist(df[12])], stars[unlist(df[13])])]
Thank you!
_ "Da Wikipedia-Seiten nicht mit dem XML-Paket gelesen werden können ..." _ => bitte erklären Sie diese Miss-Wahrheit. – hrbrmstr
Folgendes warf einen Fehler: 'URL <-" http://en.wikipedia.org/wiki/List_of_Michelin_starred_restaurants_in_New_York_City "' 'ReadHTMLTable (URL, die = 1)' ... so habe ich es hier [http: //stackoverflow.com/questions/7407735/importing-wikipedia-tables-in-r](http://stackoverflow.com/questions/7407735/importing-wikipedia-tables-in-r) und Benutzer Shambho kommentiert, dass die Sicherheit Verbindung funktioniert nicht im Paket. Können Sie den Befehl readHTMLTable auf dieser Site verwenden? – MiamiCG
Sagen 'readHTMLTable()' funktioniert nicht == "kann das XML-Paket nicht verwenden" ist ein wenig unaufrichtig – hrbrmstr