问题遇到的现象和发生背景
在爬虫时遇到带命名空间的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/tbody/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
我想要达到的结果
用xpath解析带命名空间的html标签