2016-04-06 9 views
2

Ich versuche zu lernen, wie man Web-Seiten zu kratzen und im Tutorial verwende ich den Code unter diesen Fehler zu werfen:Python Xpath: lxml.etree.XPathEvalError: Ungültige Prädikat

lxml.etree.XPathEvalError: Invalid predicate 

Die Website ich Abfrage ist (mich nicht beurteilen, es war der einzige in der Ausbildung vid verwendet: /): https://itunes.apple.com/us/app/candy-crush-saga/id553834731

die XPath-Zeichenfolge, die den Fehler verursacht, ist hier:

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

ich bin Verwenden der LXML und fordert Bibliotheken an.

Wenn Sie irgendwelche zusätzlichen Informationen benötigen, bin ich glücklich, zur Verfügung zu stellen!

+0

was Tutorial Art verwendet, dass .... mich nur gefragt, – danidee

+0

1) Bitte isolieren Sie das fehlerhafte Verhalten und geben Sie den Code 2) Was versuchen Sie im Tutorial – selyunin

+0

erreichen Sie nicht schließen eckige Klammer – splash58

Antwort

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

Sie waren ein Schließen ] nach "center-stack" fehlt.

Sie können auch ziehen Sie einfach die a[@class="name"] Tags aus div[@class="content"]

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

Beide geben Ihnen die hrefs Sie wollen:

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

Danke für deine Hilfe Padraic. Du und @ Splash58 haben gemerkt, dass ich das schließende "]" -Tag des Center-Stack-Div. –

+0

@MichaelMartinez, keine Sorge, du willst nur diese fünf Links, ja? –

+0

Später im Tutorial werden sie dir erklären, wie man durch diese Links kriecht und die selben Informationen von diesen Seiten bekommt, aber ich bin noch nicht zu diesem Video gekommen. Das ist alles, was ich im Mo brauche. Vielen Dank für deine Hilfe. Solch ein lahmer Fehler zu verpassen! –