2017-02-11 147 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/

相關問題