最近发现使用pyquery解析网页的时候,碰到了无法使用标签获取节点的情况,但使用class却能正常获取节点。
>>> html='''
<html xmlns="http://www.w3.org/1999/xhtml">
<ul class='xx'>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</html>
'''
>>> doc=pq(html)
>>> doc('.xx li')
[]
>>> doc('li')
[]
原因就是因为html里xmlns="http://www.w3.org/1999/xhtml"
这句引起的,声明该网页是xhtml类型,而pyquery默认解析器是xml类型,在pyquery文档里提到了使用xml解析xhtml时会产生问题,可参考pyquery官方说明。
解决方法也很简单,在初始化的时候加上parser="html"
告诉pyquery使用html规范解析即可:
>>> doc=pq(html,parser="html")
>>> doc('li')
[<li>, <li>, <li>]
>>> doc('.xx li')
[<li>, <li>, <li>]