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

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>

下为爬虫代码

python">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


回答:

用pyquery库

以上是 Python无法使用xpath解析带命名空间的html标签. 的全部内容, 来源链接: utcz.com/p/938441.html

回到顶部