ch4. 解析库的使用
- 使用
Xpath
- 使用
pyquery
使用pyquery
1. 基本方法
from pyquery import PyQuery as pq
doc = pq(html)
print(doc)
PyQuery对象可以接受的参数有
- html格式的字符串
- html文件
- 指定参数
url = '...'
PyQuery对象用于后续的进行选择、筛选等操作
2. CSS选择器
用于解析的html格式的字符串
html
html = '''
<div class = "wrap">
<div id = "container">
<ul class = "list">
<li class = "item-1"><a href = "link2.html">second item</a></li?
<li class = "item-0 active"><a href = "link3.html"><span class = "bold">third item</span></a></li>
<li class = "item-1 active"><a href = link4.html"><forth item</a></li>
<li class = "item-0"><a href = "link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
doc('#container .list li')
print(doc)
-
用pq对象初始化后,通过在单引号中输入筛选条件来完成在pq文件中的筛选
-
这种筛选用法为css选择器,选择条件间以空格分开
-
#name
表示id为name,.name
表示class为name,name
表示选择name节点 -
此时doc对象仍为pq类型
-
选择器的并列于先后关系
以
doc('.list .item-0.active')
为例- 先选择了
class = "list"
的节点,之后再进行一次筛选,选择了class = "item-0 active"
的节点 - 也即是说空格前后在筛选时有着先后的顺序关系,未以空格分割开的同类条件有着并列关系。
- 先选择了
3. 查找结点的函数
pq.find()
:在所有子孙节点中查找pq.children()
:在所有子节点中查找pq.parent()
:在该结点的父结点中查找pq.parents()
:在该结点的祖先节点中查找
其中括号中传入的参数仍为CSS选择器的语法,即仍为:doc('#container .list li')
4. 结合选择器进行遍历
在查询结果不止一条时,需要通过遍历来完成更高的操作要求。
doc = pq(html)
lis = doc('li').items()
for aNode in lis:
print(aNode)
5. 对查询结果进行进一步的操作
可以进行的操作包括
1. 获取属性
-
pq.attr('attrName')
doc = pq(html) a = doc('.item-0.active a') print(a.attr('href')) print(a.attr.href) #另一种写法
该代码段选中的节点如下:
<a href="link3.html"><span class="bold">third item</span></a>
2. 获取文本
-
pq.text()
doc = pq(html) a = doc('.item-0.active a') print(a.text())
该代码段选中的节点如下:
<a href="link3.html"><span class="bold">third item</span></a>
-
pq.html()
若选择该方法,则返回的为该节点的全部html语句,即输出结果为:
<a href="link3.html"><span class="bold">third item</span></a>
,但此时的类型为字符串。 -
特别注意
若得到的查询结果为多个节点