【问题标题】:Extract Data Between div Tags Beautifulsoup in Python在 Python 中提取 div 标签之间的数据 Beautifulsoup
【发布时间】:2017-02-11 23:51:45
【问题描述】:

我正在尝试创建一个 BeautifulSoup 价格网络爬虫。以下是我感兴趣的网站上显示的内容。

<div class="product-total-price">
                        <span itemprop="price">$14.76</span>

“14.76 美元”的定价是我感兴趣的全部。但是当我尝试退货时

import bs4
import requests


def getPrice(productUrl):
    res = requests.get(productUrl)
    res.raise_for_status()
    soup = bs4.BeautifulSoup(res.text, 'html.parser')
    return soup.select("div.product-total-price > span")[0].parent


price = getPrice('https://www.homedepot.ca/en/home/p.12-sheetrock-ultralight-drywall-gypsum-panel-4-x-12.1000149007.html')
print(price)

输出是:

-

我用 .parent 看看发生了什么

<div class="product-total-price">
<span itemprop="price">-</span>

而且没有显示定价。我是编程新手,曾尝试对此进行研究,但没有运气。任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 您在技术上得到了正确的答案。实际价格($14.76) 直到页面调用一些javascript 才会呈现,这就是改变页面以显示实际价格($14.76) 而不是- 的占位符的原因。在此处阅读一些解决此问题的方法:datapatterns.readthedocs.io/en/latest/recipes/…
  • 谢谢你。我查看了您的链接并找到了解决方案。这并不理想,但它帮助我学到了更多东西。我最后使用了硒,我将在下面发布答案。谢谢!

标签: python html beautifulsoup web-crawler


【解决方案1】:

如您所见,有一个-,而不是价格。

【讨论】:

    【解决方案2】:

    正如serk 所提到的,页面没有完全呈现漂亮的汤。这就是为什么我得到响应“-”,因为它只是价格的占位符,直到页面可以调用一些 javascript。这反过来又会改变定价。这是我的解决方法

    from selenium import webdriver
    
     browser = webdriver.Firefox()
     browser.get('https://www.homedepot.ca/en/home/p.12-sheetrock-ultralight-drywall-gypsum-panel-4-x-12.1000149007.html')
     elem = browser.find_element_by_css_selector('div.product-total-price > span')
    
     print(elem.text)
        **$14.76**
     browser.quit()
    

    我使用 selenium 打开浏览器以加载价格。这将打开一个浏览器,它可能并不完美,但肯定比定价为“-”更好。

    你可以在这里获取硒 http://www.seleniumhq.org/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 2023-02-10
      • 2011-09-09
      相关资源
      最近更新 更多