使用pyquery选择得到的节点不管是单个还是多个,类型都是
。
如果得到的是多个节点的对象,则需要进行遍历来获取单个节点对象,这时要注意不能直接遍历多个节点对象,而是要调用多节点对象的items()方法:
from pyquery import PyQuery as pq
html='''
- a
- b
- c
'''
>>> doc=pq(html)
# 直接获取节点,得到的是pyquery类型
>>> items=doc('li')
>>> print(type(items))
<class 'pyquery.pyquery.PyQuery'>
# 直接遍历,元素为lxml类型,不可用
>>> for item in items:
print(type(item))
<class 'lxml.etree._Element'>
<class 'lxml.etree._Element'>
<class 'lxml.etree._Element'>
# 使用items()方法,得到的是一个生成器
>>> items=doc('li').items()
>>> print(type(items))
<class 'generator'>
# 遍历这个生成器,可以发现每个元素都是一个pyquery类型
>>> for item in items:
print(type(item))
<class 'pyquery.pyquery.PyQuery'>
<class 'pyquery.pyquery.PyQuery'>
<class 'pyquery.pyquery.PyQuery'>
# 另外需注意若对父节点进行遍历,得到的结果将包含父节点自身
>>> items=doc('ul').items()
>>> for item in items:
print(item)
<ul class="xx">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>