Восклицание ресторанов с информацией о ресторанах (ошибка при запуске цикла для получения информации о нескольких ресторанах) - PullRequest
1 голос
/ 18 июня 2019

Попытка найти в сети информацию о ресторане от 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
...