最近学了Xpath,Beautiful Soup以及pyquery三种网页解析库。但可能由于学习的较浅的原因,个人认为这三种库的功能大致相同。所以这里只进行自己比较喜欢的pyquery的学习记录。
准备
下载pyquery模块
初始化工作及基本功能演示
老规矩,直接写代码,详细看注释,可以自己尝试一下
基本CSS选择器及进行遍历
html ='''
<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">< href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import Pyquery as pq
#初始化,如果是文件,可以doc = pq(filename="xxx")
doc=pq(html)
#选出id为container, class为list中的<li>标签
print(doc('#container .list li'))
#使用items()方法,得到一个生成器
lis = doc('li').items()
for li in lis:
print(li)
节点的选择
html ='''
<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">< href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import Pyquery as pq
doc = pq(html)
items = doc('.list')
#可以看一下items的种类
print(type(items))
print(items)
#find()查找所有子孙节点
lis = items.find('li')
print(type(lis))
print(lis)
#children查找所有子节点,并且可以写出筛选条件,以后的以此类推
#查找Items中所有含类active的子节点
lis = items.children('.active')
print(lis)
#直接父节点parent()
lis = items.parent()
print(lis)
#祖先节点parents()
lis = items.parents()
print(lis)
#兄弟节点siblings()
li = doc('list .item-0.active')
print(li.siblings())
获取信息
html ='''
<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">< href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import PyQuery as pq
doc =pq(html)
a = doc('.item-0.active a)
#用attr获取属性,以下两种效果一样
print(a.attr('href'))
print(a.attr.href)
#用text()获取内部文本,
print(a.text())
#用html()获取html文本,只返回符合条件的第一个,也就是把标签什么的都打印出来
print(a.html())
下面来个实例。