【问题标题】:Web scraping with rvest使用 rvest 进行网页抓取
【发布时间】:2019-10-11 09:42:52
【问题描述】:

我正在尝试使用 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中出现的不同产品名称的输出,但实际输出为null。

【问题讨论】:

    标签: r web-scraping rvest


    【解决方案1】:

    我在python中进行了实验,发现它依赖于解析器。如果我使用 lxml 它失败了。我使用 html.parser 它工作。当文档格式不完美时,通常会发生这种情况。不同的解析器==不同的结果。例如,某些元素最终会被忽略。

    为了确认这一点,我将网址放入

    https://validator.w3.org/

    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)
    

    【讨论】:

      【解决方案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)。

      【讨论】:

      • 您能解释一下为什么 xpath 比 css 选择器效果更好吗?在这种情况下,我认为可能是由于内容类型 application/xhtml+xml; charset=utf-8,但更普遍的情况是这样吗?
      • 说实话我不知道为什么,这只是使用rvest时的经验。可能是因为您必须在 CSS 选择器中首先使用 # 字符。看看这里:stat4701.github.io/edav/2015/04/02/rvest_tutorial
      猜你喜欢
      • 2018-02-15
      • 2018-10-27
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多