Python Xpath:lxml.etree.XPathEvalError:无效谓词

Posted

技术标签:

【中文标题】Python Xpath:lxml.etree.XPathEvalError:无效谓词【英文标题】:Python Xpath: lxml.etree.XPathEvalError: Invalid predicate 【发布时间】:2016-07-26 18:03:10 【问题描述】:

我正在尝试学习如何抓取网页,在教程中我使用下面的代码抛出了这个错误:

lxml.etree.XPathEvalError: Invalid predicate

我正在查询的网站是(不要评判我,这是培训视频中使用的那个:/):https://itunes.apple.com/us/app/candy-crush-saga/id553834731

导致错误的xpath字符串在这里:

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

我正在使用 LXML 和请求库。

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

【问题讨论】:

使用了什么样的教程......只是想知道 1) 请隔离错误行为并提供代码 2) 你想在教程中实现什么 你不要关闭方括号 @splash58 - 谢谢!这是我的错误,我错过了中心堆栈 div 上的关闭“]”。我应该发现的!感谢您的帮助。现在工作正常。 【参考方案1】:
print(tree.xpath('//div[@class="center-stack"]//*/a[@class="name"]/@href'))

您在"center-stack" 之后缺少结束]

您也可以只从div[@class="content"] 中提取a[@class="name"] 标签

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

两者都会给你你想要的href:

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']

【讨论】:

感谢您的帮助帕德莱克。你和@Splash58 注意到我错过了中心堆栈 div 的结束“]”标记。 @MichaelMartinez,别担心,你只想要这五个链接,是吗? 稍后在教程中,他们会告诉您如何爬取这些链接并从这些页面获取相同的信息,但我还没有看到那个视频。所以这就是我最需要的。非常感谢你的帮助。这样一个蹩脚的错误不容错过! @MichaelMartinez,没问题,我自己已经做过很多次了。

以上是关于Python Xpath:lxml.etree.XPathEvalError:无效谓词的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫xpath的语法

python xpath

Python解析库lxml与xpath用法总结

Python爬虫--Xpath

selenium + Python -- xpath定位

Python之xpath