1. 初始化
- 字符串初始化
html = '''
<div>
<ul>
<li class="item-0">first item</li>
<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">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('li'))
- URL初始化
doc = pq(url='http://cuiqingcai.com')
- 文件初始化
doc = pq(filename='demo.html')
2. 基本CSS选择器
doc = pq(html)
print(doc('#id值 .class值 节点值'))
3. 查找节点
- 子节点
doc = pq(html)
items =doc('.list')
lis = items.find('li')
find()的查找范围是节点的所有子孙节点,children()只查找子节点
lis = items.children()
如果要筛选所有子节点中符合条件的节点,比如想筛选出子节点中class为active的节点,可以向children()方法传入CSS选择器.active:
lis = items.children('.active')
- 父节点
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<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">fourth 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)
items = doc('.list')
container = items.parent()
- 祖先节点可用parents()方法
- 如果想要筛选某个祖先节点的话,可以向parents()方法传入CSS选择器,这样就会返回祖先节点中符合CSS选择器的节点
- 兄弟节点
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())
- 如果要筛选某个兄弟节点,我们依然可以向siblings方法传入CSS选择器,这样就会从所有兄弟节点中挑选出符合条件的节点了
4. 遍历
对于多个节点的结果,我们就需要遍历来获取。例如,这里把每一个li节点进行遍历,需要调用items()方法:
doc = pq(html)
lis = doc('li').items()
print(type(lis))
for li in lis:
print(li, type(li))
5. 获取信息
- 获取属性
doc = pq(html)
a = doc('.item-0.active a')
print(a.attr('href'))
print(a.attr.href)
假如符合条件的a节点有多个,则需要进行遍历:
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('a')
for item in a.items():
print(item.attr('href'))
- 获取文本
doc = pq(html)
a = doc('.item-0.active a')
print(a.text())
如果想要获取这个节点内部的HTML文本,就要用html()方法:
print(li.html())
假设选中的是多个节点,html()方法会返回第一个节点的html文本,而text()方法会返回所有节点内部的纯文本,并用一个空格隔开,即返回的是一个字符串。
6. 节点操作
举一个有用的比较多的节点操作的例子:
<div class="wrap">
Hello, World
<p>This is a paragraph.</p>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
wrap = doc('.wrap')
print(wrap.text()) # 1
wrap.find('p').remove()
print(wrap.text()) # 2
1处提取出来的文本是:
Hello, World This is a paragraph.
2处提取出来的文本是:
Hello, World
更多节点操作的方法http://pyquery.readthedocs.io/en/latest/api.html
7. 伪类选择器
CSS选择器之所以强大,还有一个很重要的原因,那就是它支持多种多样的伪类选择器,例如选择第一个节点、最后一个节点、奇偶数节点、包含某一文本的节点等。
关于CSS选择器的更多用法,可以参考http://www.w3school.com.cn/css/index.asp
以上总结于崔庆才的《python3网络爬虫开发实战》
网友评论