使用TeleBot+LXML XPath提取HTML Div文本失败,变量为空求助
正确提取页面目标文本的解决方案
问题根源
- 浏览器自动生成的XPath会补全
<tbody>标签,但该页面的原始HTML中并没有这个节点,导致路径完全匹配失败 - 你的XPath错误包含了不存在的
index节点,这是提取结果为空的核心原因
修正后的代码
import telebot import requests import lxml.html bot = telebot.TeleBot('你的机器人Token') @bot.message_handler(content_types=['text']) def get_text_messages(message): api = requests.get("https://slovardalja.net/word.php?wordid=21880") tree = lxml.html.document_fromstring(api.text) # 基于class定位目标容器,路径更稳定 text_original = tree.xpath('//div[@class="word-main"]/p[1]/strong/text()') # 处理提取结果,避免空列表报错 result = text_original[0] if text_original else "未找到目标文本" print(result) bot.send_message(message.chat.id, result) bot.polling(none_stop=True, interval=0)
关键说明
- 放弃依赖绝对层级的XPath,改用
//div[@class="word-main"]直接定位目标文本所在的父容器,这种方式不受页面层级小幅度调整的影响,稳定性更高 - 移除了浏览器自动补的
<tbody>和错误的index节点,确保路径与页面真实HTML结构一致 - 增加了空结果判断,避免提取失败时给用户发送空内容
内容的提问来源于stack exchange,提问作者TuRb0Z
相关产品推荐
相关产品推荐

