在Python中使用div标签Beautifulsoup提取数据

时间:2017-02-11 23:51:45

标签: python html beautifulsoup web-crawler

我试图创建一个BeautifulSoup价格网络抓取工具。以下是我对抓取感兴趣的网站所显示的内容。

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

定价&#34; $ 14.76&#34;是我感兴趣的。但是当我试图归还它时

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>

并没有显示定价。我是编程新手,并试图研究这个,但没有运气。任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:0)

enter image description here

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

答案 1 :(得分:0)

如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/