2017-02-11 74 views
0

我正在尝试创建一个BeautifulSoup价格网络爬虫。以下是我感兴趣的抓取网站显示的内容。在div标签之间提取数据Python中的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> 

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

+0

你在技术上得到正确的答案了。在页面调用一些javascript之前,实际的价格'($ 14.76)'不会被渲染,而是改变页面以显示实际价格'($ 14.76)'而不是'-'的占位符。请阅读以下一些补救方法:https://datapatterns.readthedocs.io/en/latest/recipes/scraping-beyond-the-basics.html#dealing-with-javascript – serk

+0

谢谢serk。我看了一下你的链接,找到了解决方案。这并不理想,但它帮助我学习了更多。我最后使用硒,我会在下面发布答案。谢谢! –

回答

0

enter image description here

正如你可以看到,有一个-,而不是价格。

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() 

我用硒打开浏览器,以便价格加载。这将打开一个浏览器,它可能不完美,但它肯定是更好的定价是' - '。

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

相关问题