XPath文本匹配含点号时字面量生效 变量拼接后无返回结果问题
问题根因
- 拼接的匹配条件遗漏了必须的英文点号:你需要的匹配规则是
数字+英文句号开头,正确的查询条件是"62.",但你的拼接代码里只写了str(62),没有加后缀的.,匹配规则不匹配自然拿不到结果。 - 错误把Python语法的括号、引号混入了XPath路径:
tree.xpath()的外层括号是Python调用方法的语法,不属于XPath路径本身,你在tail里额外拼接了'),直接导致路径格式错误,同时触发字符串转义产生多余的反斜杠。
修复后代码
推荐用f-string拼接,逻辑更清晰不容易出错:
for i in range(2): # 测试可固定为62,循环使用的话替换为i即可 target_num = 62 # 拼接时记得加数字后的英文点号,XPath路径不需要带外层的调用括号 path = f'/html/body/div[1]/main/article/div[2]/div[5]/div[*]/p[starts-with(text(),"{target_num}.")]/text()' baker = tree.xpath(path)
如果要沿用你原来的拆分写法,调整如下:
nose = '/html/body/div[1]/main/article/div[2]/div[5]/div[*]/p[starts-with(text(),' # tail去掉多余的单引号和右括号 tail = ')]/text()' for i in range (2): # 数字后补充英文点号 node = '"' + str(62) + '."' path = nose + node + tail baker = tree.xpath(path)
内容的提问来源于stack exchange,提问作者user8982648
相关产品推荐
相关产品推荐

