Попытка найти в сети информацию о ресторане от Yelp, такую как диапазон цен ($$$$), описание цен, алкоголь, телефон, веб-сайт, показатель здоровья. Код прекрасно работает для 2 ресторанов - Dirty French и Uncle Boons, но начинает показывать ошибку при использовании того же кода для ресторана Legacy Records. Это связано с тем, что XPath, который я использовал в коде для алкоголя (и веб-сайт, который не указан в коде), отличается для Dirty French и Uncle Boons и для Legacy Records. Кроме того, ценовой диапазон для Legacy Records отсутствует, но он все еще отображается в выходных данных.
Есть ли способ, которым я могу проходить по разным ресторанам и получать требуемую информацию, даже если XPath поддерживается постоянным, или, в любом случае, так, что XPath изменяется отдельно для каждого ресторана? Я собираю данные для более чем 1000 ресторанов, поэтому не могу каждый раз менять код вручную.
Я даже иду в правильном направлении? Есть ли лучший способ?
Этот код очень хорошо может быть воспроизведен в вашей системе.
actual_name <- data.frame(actual_name = c("dirty-french-new-york", "uncle-
boons-new-york",
"legacy-records-new-york"))
titles <- c()
urls <- c()
urls <- paste(initial, actual_name$actual_name, sep = "")
map_df(urls, function(i){
url <- read_html(i)
data.frame(Title = url %>% html_node("title") %>% html_text(),
HealthScore = url %>% html_node(".health-score-description") %>%
html_text(),
Rating = url %>%
html_node(xpath = "//* [@id='wrap']/div[2]/div/div[1]/div/div[3]/div[1]/div[2]/div[1]/div[1]/div")
%>%
html_attr("title"),
Phone = url %>% html_node(".biz-phone") %>% html_text(),
Price = url %>% html_node(".price-range") %>% html_text(),
PriceDescription = url %>% html_node(".price-description") %>%
html_text(),
Alcohol = url %>%
html_nodes(xpath = "//* [@id='wrap']/div[2]/div/div[1]/div/div[4]/div[1]/div/div[2]/ul/li[3]/span[2]/a") %>%
html_text())
}) -> titles