2016-12-21 74 views
0

我目前正在從Udemy的Python教程(總新手到Python)學習。 我目前在一個美麗的湯部分,我們正在忙於練習,以刮除作者在亞馬遜書上的價格。 我的代碼如下:Python - 美麗的湯選擇只返回[]

import bs4, requests 
url = 'https://www.amazon.com/Automate-Boring-Stuff-Python-Programming/dp/1593275994/' 
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} 

response = requests.get(url, headers=headers) 
response.raise_for_status() 
soup = bs4.BeautifulSoup(response.text, 'html.parser') 
soup.select('#addToCart > a > h5 > div > div.a-column.a-span4.a-text-right.a-span-last > span.a-size-medium.a-color-price.header-price') 

當我檢查價格元素的路徑,我可以看到這一點:

<span class="a-size-medium a-color-price header-price"> 


      $25.45 



    </span> 

然而,當我複製和由soup.select貼吧並運行python命令,我只返回一個[]即2個方括號。我應該得到第二個代碼框的內容。

更新:在我輸入問題期間,它確實正確顯示了結果,框中的內容爲$ 25.45,但是5分鐘後它返回僅獲取[]括號的結果。我在一個代理之後,並且沒有通過代理嘗試,結果沒有變化。我在做response.raise_for_status()時沒有收到任何錯誤。請有人幫忙嗎?

(請記住,我不打算屏幕刮任何商業網站在那裏,我非常希望我的學習收穫應用到室內場景)

謝謝!

回答

1

你是過度複雜化你的CSS選擇器並使其變得脆弱 - 嚴重依賴於頁面佈局。您不必通過完整的父子鏈來查找元素。選擇您可以基於您的定位器的最可靠,可讀和適當的點。例如,在這種情況下,以下爲我的作品:

soup.select('#addToCart .header-price') 
+0

謝謝你,這並不工作 –

+0

soup.select( '搭設尺寸-medium.a色 - price.header價格')也爲我工作 –