import urllib2
from lxml import etree
url = "http://www.ebay.com/sch/i.html?rt=nc&LH_Complete=1&_nkw=Under+Armour+Dauntless+Backpack&LH_Sold=1&_sacat=0&LH_BIN=1&_from=R40&_sop=3&LH_ItemCondition=1000"
response = urllib2.urlopen(url)
htmlparser = etree.HTMLParser()
tree = etree.parse(response, htmlparser)
其中URL是一個標準的eBay搜索結果頁面有一些過濾應用:
我期待例如提取的產品價格$ 40.00 $ 34.95等等
有幾個可能的XPath(如由螢火蟲提供的,XPath的檢查Firefox插件,和源的手動檢查):
/html/body/div[5]/div[2]/div[3]/div/div[1]/div/div[3]/div/div[1]/div/w-root/div/div/ul/li[1]/ul[1]/li[1]/span
id('item3d00cf865e')/x:ul[1]/x:li[1]/x:span
//span[@class ='bold bidsold']
選擇後者:
xpathselector="//span[@class ='bold bidsold']"
tree.xpath(xpathselector)
然後按預期的方式返回一個Element
對象的列表。當我獲得.text
屬性時,我預計會得到價格。但我得到的是:
In [17]: tree.xpath(xpathselector)
Out[17]:
['\n\t\t\t\t\t',
u' 1\xc2\xa0103.78',
'\n\t\t\t\t\t',
u' 1\xc2\xa0048.28',
'\n\t\t\t\t\t',
' 964.43',
'\n\t\t\t\t\t',
' 922.43',
'\n\t\t\t\t\t',
' 922.43',
'\n\t\t\t\t\t',
' 275.67',
'\n\t\t\t\t\t',
包含在每個值看起來像價格,但(我)的價格比顯示在網頁上有什麼顯着更高,(二)我不知道什麼都換行符和標籤正在那裏做。 在嘗試提取價格時,我在這裏存在根本性錯誤嗎?
我通常使用WebDriver來處理這類事情,並利用CSS選擇器,xpath和class來查找元素。但在這種情況下,我不需要瀏覽器交互,這就是爲什麼我第一次使用urllib2
和lxml
。
等
謝謝,是仔細觀察我看到它是兩者:(i)將貨幣,以及(ii)以西班牙語將該頁面返回到urllib2。 urllib2有欺騙位置的方法嗎? – Pyderman
@Pyderman嘗試檢查您的請求的樣子。找到一個工具,你可能會發現一些有關區域設置的信息。 –