2017-03-26 5 views
2

申し訳ありませんが、私はSelenium noobであり、多くの読書を行っていますが、まだこのページから製品価格(0.55ポンド)を手に入れることができません: https://groceries.asda.com/product/spaghetti-tagliatelle/asda-spaghetti/36628 bs4を使用してhtmlを解析すると、製品の詳細は表示されません。 Seleniumを使用して、ページ全体の文字列を取得し、そこに価格を表示することができます(次のコードを使用)。私はこれから何とか価格を引き出すことができるはずですが、それほどハッキリしないソリューションを好むでしょう。Seleniumを使用してWebページで隠し製品の詳細を掻き立てる

browser = webdriver.Firefox(executable_path=r'C:\Users\Paul\geckodriver.exe') 
browser.get('https://groceries.asda.com/product/tinned-tomatoes/asda-smart-price-chopped-tomatoes-in-tomato-juice/19560') 
content = browser.page_source 

私はこのような何かを実行した場合:、要素をselenium.webdriver.firefox.webelement.FirefoxWebElement(= "df23fae6-e99c-403C-a992-a1adf1cb8010" セッション:

elem = driver.find_element_by_id("bodyContainerTemplate") 
print(elem) 

それはちょうど返します= "6d9aac0b-2e98-4bb5-b8af-fcbe443af906")

価格はこの要素に関連付けられたテキストです:p class = "prod-price"しかし、私はこの作業をすることはできません。このテキスト(製品価格)を取得するにはどうしたらよいですか?

+0

ページからの情報の一部が欠落している理由は、Webページの一部がJavascriptでレンダリングされているためです。もっと「ハッキー」な解答がないように[this](https://github.com/scrapy-plugins/scrapy-splash)をチェックしてください。 –

+3

APIから製品データを入手できます。 'https://groceries.asda.com/api/items/view?itemid = 36628&responsegroup = extended&cacheable = true&storeid = 4565&shipdate = currentDate&requestorigin = gi'、セレンを使う必要はありません。 'python-requests'のすべての方法! – leovp

+0

代わりに 'print(elem.text)'を試してください –

答えて

1

elemのタイプはWebElementです。あなたは、ウェブ要素のテキスト値を抽出するために必要がある場合は、コードの下に使用する可能性があります:それはセレンと連携し、

elem = driver.find_element_by_class_name("prod-price-inner") 
print(elem.text) 
1

は、このソリューションを試してみて、

from bs4 import BeautifulSoup 
from selenium import webdriver 

url='https://groceries.asda.com/product/spaghetti-tagliatelle/asda-spaghetti/36628' 

driver = webdriver.PhantomJS() 
driver.get(url) 

data = driver.page_source 

soup = BeautifulSoup(data, 'html.parser') 

ele = soup.find('span',{'class':'prod-price-inner'}) 

print ele.text 

driver.quit() 

をbeautifulsoupそれが印刷されます:

£0.55 
関連する問題