Python中xpath拆分报错问题如何解决?

time_list = response.xpath(’//div[@class=“listBox”]/ul[@class=“list”]//li/span/text()’).extract()
这个 xpath 我拆分成这样

for item in response.xpath(’//div[@class=“listBox”]/ul[@class=“list”]//li’):
time=item.xpath(’/span/text’).extract()[0]
title=item.xpath(’/a/text()’).extract()[0]
link=item.xpath(’/a/@href’).extract()[0]
print(time)
print(title)
print(link)

我这样写的话会报错,如何写才是正确的?
Python中xpath拆分报错问题如何解决?


2 回复

遇到xpath拆分报错,通常是字符串处理或语法错误导致的。核心思路是检查你的xpath表达式字符串是否正确构建,特别是当它包含变量或需要拼接的时候。

最常见的情况是字符串中的引号嵌套问题。比如你想用xpath查找一个包含特定变量文本的元素:

# 错误示例:引号错误导致字符串提前结束
wrong_xpath = f'//div[@class="item" and text()="{user_input}"]'
# 如果user_input包含引号,比如 It's great,xpath就会变成:
# //div[@class="item" and text()="It's great"]  -> 语法错误

正确做法是使用不同的引号或转义:

# 方法1:外层用单引号,内层用双引号(或反之)
xpath1 = f'//div[@class="item" and text()="{user_input.replace(\'"\', \'"\')}"]'
# 方法2:使用concat函数处理可能包含引号的文本
xpath2 = f'//div[@class="item" and text()=concat("{user_input.replace(\'"\', \'"\', "\'")}")]'
# 方法3:直接用转义
xpath3 = f'//div[@class="item" and text()=\"{user_input}\"]'

另一个常见错误是路径拼接时漏了分隔符:

# 错误
base = '//div'
part = 'span'
xpath = base + part  # 结果是 '//divspan',少了/

# 正确
xpath = base + '/' + part  # '//div/span'

建议: 写xpath时先用固定字符串测试,确认表达式在浏览器开发者工具里能正常工作,再改成动态拼接。用f-string或format时要特别注意特殊字符的转义。

简单说就是检查引号和路径拼接。


time=item.xpath(’/span/text’).extract()[0]
title=item.xpath(’/a/text()’).extract()[0]
link=item.xpath(’/a/@href’).extract()[0]

前面的 / 删掉就行了

回到顶部