2017-02-11 14 views
0

私はBeautifulSoupの価格のWebクローラを作成しようとしています。以下は、私がクロールに興味を持っているウェブサイトから表示されているものです。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> 

そして価格は表示されません。私はプログラミングに慣れていないし、これを研究しようとしたが運がなかった。助けていただければ幸いです。ありがとうございます。

+0

をセレンを得ることができます。実際の価格 '($ 14.76)'は、ページがいくつかのjavascriptを呼び出すまでレンダリングされず、 '-'のプレースホルダではなく、実際の価格($ 14.76)を表示するようにページを変更します。この問題を解決するには、いくつかの方法をお読みください。https://datapatterns.readthedocs.io/en/latest/recipes/scraping-beyond-the-basics.html#dealing-with-javascript – serk

+0

ありがとうございました。私はあなたのリンクを見て、解決策を見つけました。理想的ではありませんが、私はもう少し学べました。私は最後にセレンを使用した、私は以下の答えを投稿します。ありがとうございました! –

答えて

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/

関連する問題