2016-04-06 8 views
2

Я пытаюсь узнать, как царапать веб-страницы и в учебнике я использую ниже код бросает эту ошибку:Python Xpath: lxml.etree.XPathEvalError: Invalid предикат

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 заметили, что я пропустил закрывающий «]» тег div центра. –

+0

@MichaelMartinez, не беспокойтесь, вам нужны только эти пять ссылок, да? –

+0

Позже в учебном пособии мы расскажем вам, как просканировать эти ссылки и получить ту же информацию с этих страниц, но пока я не добрался до этого видео. Так что это все, что мне нужно в мо. Большое спасибо за Вашу помощь. Такая хромая ошибка пропустить! –