Python无法使用xpath解析带命名空间的html标签.

新手上路,请多包涵

问题遇到的现象和发生背景
在爬虫时遇到带命名空间的html标签mm:beginlock与mm:endlock,无法使用xpath解析内容

问题相关代码
下为html结构

<mm:beginlock translatorclass="xx" type="xx" orig="%3C!--#include file=%22xx.inc%22--%3E" fileref="xx.inc" depfiles="file://///xx.xx.xx.xx/d$/bb/zz/xx.inc"><meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <mm:endlock>...</mm:endlock>
</mm:beginlock>

下为爬虫代码

html = requests.get(url, headers=header)
selector = etree.HTML(html.text)
print(date_temp = selector.xpath('/html/body/mm:beginlock/mm:endlock/table/tbody/tr[2]/td[1]/text()'))

运行后报错:lxml.etree.XPathEvalError: Undefined namespace prefix
我的解答思路和尝试过的方法
上网查询得知是xpath命名空间导致的,采用了两种方法仍未解决
1.忽略命名空间

html = requests.get(url, headers=header)
selector = etree.HTML(html.text)
print(selector.xpath('/html/body//*[name() = "mm:beginlock"]//*[name() = "mm:endlock"]/table/tr[2]/td[1]/text()))

输出结果为空
2.节点前加命名空间的前缀

html = requests.get(url, headers=header)
selector = etree.HTML(html.text)
print(selector.xpath('/html/body/mm:beginlock/mm:endlock/table/tbody/tr[2]/td[1]', namespaces={"mm"="mm:"}))

编译器第三行标红报错:Cannot assign to function call

阅读 2.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题