gpt4 book ai didi

python - lxml.etree.XPathEvalError : Invalid expression

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:30 24 4
gpt4 key购买 nike

我在使用 Python 时遇到了一个我无法理解的错误。我已将代码简化到最低限度:

response = requests.get('http://pycoders.com/archive')
tree = html.fromstring(response.text)
r = tree.xpath('//divass="campaign"]/a/@href')
print(r)

仍然出现错误

Traceback (most recent call last):
File "ultimate-1.py", line 17, in <module>
r = tree.xpath('//divass="campaign"]/a/@href')
File "lxml.etree.pyx", line 1509, in lxml.etree._Element.xpath (src/lxml/lxml.etree.c:50702)
File "xpath.pxi", line 318, in lxml.etree.XPathElementEvaluator.__call__ (src/lxml/lxml.etree.c:145954)
File "xpath.pxi", line 238, in lxml.etree._XPathEvaluatorBase._handle_result (src/lxml/lxml.etree.c:144962)
File "xpath.pxi", line 224, in lxml.etree._XPathEvaluatorBase._raise_eval_error (src/lxml/lxml.etree.c:144817)
lxml.etree.XPathEvalError: Invalid expression

有人知道问题出在哪里吗?可能是依赖问题吗?谢谢。

最佳答案

表达式'//divass="campaign"]/a/@href'在语法上不正确并且没有多大意义。相反,您的意思是检查 class 属性:

//div[@class="campaign"]/a/@href

现在,这将有助于避免无效表达式错误,但您将无法通过表达式找到任何内容。这是因为 requests 收到的响应中不存在数据。您需要模仿浏览器的操作来获取所需的数据,并发出额外的请求来获取包含营销事件的 javascript 文件。

以下是对我有用的方法:

import ast
import re

import requests
from lxml import html

with requests.Session() as session:
# extract script url
response = session.get('http://pycoders.com/archive')
tree = html.fromstring(response.text)
script_url = tree.xpath("//script[contains(@src, 'generate-js')]/@src")[0]

# get the script
response = session.get(script_url)
data = ast.literal_eval(re.match(r'document.write\((.*?)\);$', response.content).group(1))

# extract the desired data
tree = html.fromstring(data)
campaigns = [item.attrib["href"].replace("\\", "") for item in tree.xpath('//div[@class="campaign"]/a')]
print(campaigns)

打印:

['http://us4.campaign-archive2.com/?u=9735795484d2e4c204da82a29&id=3384ab2140', 
...
'http://us4.campaign-archive2.com/?u=9735795484d2e4c204da82a29&id=8b91cb0481'
]

关于python - lxml.etree.XPathEvalError : Invalid expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37255555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com