2012-11-05 22 views
3

我試圖解析亞馬遜編制價格清單,作爲與統計相關的更大項目的一部分。但是,我很難過。我想知道如果任何人都可以查看我的代碼並告訴我哪裏出錯了?BeautifulSoup和Amazon.co.uk

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import mechanize 
from bs4 import BeautifulSoup 

URL_00 = "http://www.amazon.co.uk/Call-Duty-Black-Ops-PS3/dp/B007WPF7FE/ref=sr_1_2?ie=UTF8&qid=1352117194&sr=8-2" 

bro = mechanize.Browser() 
resp = bro.open(URL_00) 
html = resp.get_data() 
soup_00 = BeautifulSoup(html) 
price = soup_00.find('b', {'class':'priceLarge'}) 
print price #this should return at the very least the text enclosed in a tag 

根據截圖,我上面寫的是應該工作的,不是嗎?

http://i.imgur.com/bPVe1.png (cannot post an image as a newbie..)

以及所有我得到在打印出的 「[]」,如果我去年前行更改爲這樣:

price = soup_00.find('b', {'class':'priceLarge'}).contents[0].string 

price = soup_00.find('b', {'class':'priceLarge'}).text 

我得到一個「noneType」錯誤。

我很困惑,爲什麼會發生這種情況。 chrome中的URL中的頁面編碼表示UTF8,我的腳本在第2行中進行了調整。 我已經將其更改爲ISO(根據頁面的內部HTML),但這使得零差異,所以我積極的編碼不是問題在這裏。

此外,不知道這是否是相關的,但我的Linux系統區域設置爲UTF-8應該不會造成問題嗎?

任何想法都會受到歡迎。

+2

而且您已確認Mechanize與您的瀏覽器具有完全相同的HTML?否*不*認爲亞馬遜會向不同的用戶代理髮送完全相同的響應。 –

+0

只是所以你不認爲我忽略了評論=) 我已經添加了一個用戶代理來機械化我的機器。從我的瀏覽器下載的版本等於一個機械拉,所以這不應該是一個問題... – NopeNopeNope

回答

0

有沒有必要做這個亞馬遜提供的API

https://affiliate-program.amazon.co.uk/gp/advertising/api/detail/main.html

產品廣告API可以幫助您使用產品搜索做廣告亞馬遜的產品和查找功能,產品信息和功能,如客戶評論,類似產品,願望清單和新的和使用的清單。

這裏更多的細節:Amazon API library for Python?

我使用的API,它變得非常簡單而可靠,然後從網頁刮數據,即使有BS。您還將獲得新的二手價格列表,而不僅僅是「標題」價格。

+0

我會檢查了這一點。然而,由於我不是「正式」這樣做,而更多的是作爲個人的副項目,所以我實際上希望得到快速和骯髒的東西。但是,謝謝你。 – NopeNopeNope

+0

這實際上是註冊時刻的問題,並且您獲得的界面真的可用。相信我,它會更快,然後按照你嘗試的方式做(這是爲什麼BS存在!) –

+0

所以三個主要選擇是pyaws,bottlenose或pyamazon?你會建議哪些? – NopeNopeNope