2016-04-06 83 views
2

我想學習如何刮網頁,並在教程中,我使用下面的代碼引發此錯誤:的Python的XPath:lxml.etree.XPathEvalError:無效的謂詞

lxml.etree.XPathEvalError: Invalid predicate 

網站我查詢時(不要對我做出判斷,這是在訓練VID使用的一個:/):https://itunes.apple.com/us/app/candy-crush-saga/id553834731

導致錯誤的XPath字符串是在這裏:

links = tree.xpath('//div[@class="center-stack"//*/a[@class="name"]/@href') 

我使用LXML和請求庫。

如果您需要任何其他信息,我很樂意提供!

+0

使用什麼樣的教程是....只是想知道 – danidee

+0

1 )請隔離錯誤的行爲,並提供代碼 2)你想在教程 – selyunin

+0

中實現什麼你不關閉方括號 – splash58

回答

3
print(tree.xpath('//div[@class="center-stack"]//*/a[@class="name"]/@href')) 

你是缺少一個右"center-stack"]

你也可以拉a[@class="name"]標籤從div[@class="content"]

tree.xpath('//div[@class="content"]//a[@class="name"]/@href') 

都將給你的HREFs你想:

In [19]: import requests 

In [20]: from lxml.html import fromstring 


In [21]: r = requests.get("https://itunes.apple.com/us/app/candy-crush-saga/id553834731") 

In [22]: tree = fromstring(r.content) 

In [23]: a = tree.xpath('//div[@class="content"]//a[@class="name"]/@href') 

In [24]: b = tree.xpath('//div[@class="center-stack"]//*/a[@class="name"]/@href') 

In [25]: print(a == b) 
True 

In [26]: print(a) 
['https://itunes.apple.com/us/app/word-search-puzzles/id609067187?mt=8', 'https://itunes.apple.com/us/app/cookie-jam/id727296976?mt=8', 'https://itunes.apple.com/us/app/jewel-mania/id561326449?mt=8', 'https://itunes.apple.com/us/app/jelly-splash/id645949180?mt=8', 'https://itunes.apple.com/us/app/bubble-island/id531354582?mt=8'] 

In [27]: print(b) 
['https://itunes.apple.com/us/app/word-search-puzzles/id609067187?mt=8', 'https://itunes.apple.com/us/app/cookie-jam/id727296976?mt=8', 'https://itunes.apple.com/us/app/jewel-mania/id561326449?mt=8', 'https://itunes.apple.com/us/app/jelly-splash/id645949180?mt=8', 'https://itunes.apple.com/us/app/bubble-island/id531354582?mt=8'] 
+0

感謝您的幫助Padraic。你和@ Splash58注意到我錯過了關閉「]」標籤的中央堆棧分區。 –

+0

@MichaelMartinez,不用擔心,你只需要那五個鏈接,是嗎? –

+0

在本教程的後面,他們會討論如何抓取這些鏈接,並從這些網頁獲取相同的信息,但我還沒有看到該視頻。所以這就是我需要的。非常感謝你的幫助。這樣的錯誤錯過了! –