我正在尝试使用rvest将网页抓取到以下网页: https://www.superu.ad/oli-de-girasol_c360259/
但是看来rvest(R)无法找到URL中已经存在的某些CSS选择器,例如.product-name
webpage<-read_html('https://www.superu.ad/oli-de-girasol_c360259/')
rank_data_html <- html_nodes(webpage,'.product-name') #returns nothing
我希望出现在url中的不同产品名称的输出,但实际输出为空。
答案 0 :(得分:2)
这应该可以完成工作:
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,您可以使用适用于Chrome的SelectorGadget扩展程序(可以切换到Xpath)。
答案 1 :(得分:1)
我在python中进行了实验,发现它取决于解析器。如果我使用lxml,它将失败。我使用html.parser起作用了。当文档的格式不正确时,通常会发生这种情况。不同的解析器==不同的结果。例如,某些元素最终被忽略了。
为确认这一点,我将网址放入
即
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)