Я пытаюсь сделать веб-скрейпинг на следующую веб-страницу с помощью rvest: https://www.superu.ad/oli-de-girasol_c360259/
Но похоже, что rvest (R) не может найти некоторые селекторы css, которые уже существуют в URL-адресе, например .product-name
webpage<-read_html('https://www.superu.ad/oli-de-girasol_c360259/')
rank_data_html <- html_nodes(webpage,'.product-name') #returns nothing
Я ожидаю вывод различных названий продуктов, которые появляются в URL-адресе, но фактический вывод равен нулю.





Я экспериментировал с python и обнаружил, что это зависит от парсера. Если бы я использовал lxml, это не удалось. Это я использовал html.parser, это сработало. Это часто происходит, когда документ не идеально сформирован. Другой парсер == другой результат. Например, некоторые элементы в конечном итоге игнорируются.
Чтобы подтвердить это, я поместил URL в
то есть
https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.superu.ad%2Foli-de-girasol_c360259%2F
На этой странице есть ряд ошибок, которые могут быть замешаны.
Может быть, это вам как-то пригодится? Не знаете, какие варианты у вас есть для разных парсеров/пакетов, которые могли бы лучше справиться с этой ситуацией, будьте более снисходительны.
Пример с python (извинения)
Работает:
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://www.superu.ad/oli-de-girasol_c360259/')
soup = bs(r.content, 'html.parser')
products = [item.text for item in soup.select('.product-name')]
print(products)
Не удается
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://www.superu.ad/oli-de-girasol_c360259/')
soup = bs(r.content, 'lxml')
products = [item.text for item in soup.select('.product-name')]
print(products)
Это должно сделать работу:
library(rvest)
library(dplyr) # to use the pipes %>%
webpage = read_html('https://www.superu.ad/oli-de-girasol_c360259/')
product_names = webpage %>%
html_nodes(xpath= '//*[contains(concat( " ", @class, " " ), concat( " ", "product-name", " " ))]') %>%
html_text()
product_names
Вы должны использовать Xpath с rvest, он работает лучше, чем селекторы CSS.
Чтобы получить Xpath, вы можете использовать расширение SelectorGadget для Chrome (вы можете переключиться на Xpath).
Честно говоря, я не знаю почему, это просто опыт использования rvest. Может быть, это потому, что вы должны сначала использовать символ # в своем селекторе css. Посмотрите здесь: stat4701.github.io/edav/2015/04/02/rvest_tutorial
Не могли бы вы объяснить, почему xpath работает лучше, чем селекторы css? В этом случае я думаю, что это может быть связано с типом контента application/xhtml+xml; charset=utf-8, но в целом так ли это на самом деле?