PyQuery详解
为什么选择PyQuery?
Python爬虫解析库,主流的有
- PyQuery
- Beautifulsoup
- Scrapy Selectors
- 正则表达式。
PyQuery和scrapy Selectors都是基于lxml模块,而lxml和正则表达式都是C语言写的,只有Beautifulsoup是用纯Python编写的,所以在实测中,Beautifulsoup 的解析速度比其他几种慢了5倍以上!
正则表达式的构造稍微复杂一点,一般在结构化的网页中没必要用正则(易出错)。Scrapy Selectors支持css,xpath以及正则表达式,PyQuery只支持css(我最开始学的是xpath,后来觉得css语法更精简一些)。Scrapy Selector中的css语法和PyQuery中的略有不同,本文以PyQuery为例(不用Scrapy框架的话,PyQuery就够用了)
如何使用?
首先在命令行里 pip install pyquery 安装一下
pip install pyquery==1.4.3
利用它,我们可以直接解析 DOM 节点的结构,并通过 DOM 节点的一些属性快速进行内容提取。
html = '''
<div id="cont">
<ul class="slist">
<li class="item-0">web开发</li>
<li class="item-1"><a href="link2.html">爬虫开发</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">数据分析</span></a></li>
<li class="item-1 active"><a href="link4.html">深度学习</a></li>
<li class="item-0"><a href="link5.html">机器学习</a></li>
</ul>
</div>
'''
1、实例演示
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('li'))
2、css选择器
doc = pq(html)
print(doc('#cont .slist li'))
print(type(doc('#cont .slist li')))
3、提取内容
for item in doc('#cont .slist li').items():
print(item.text())
4、子节点
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.slist')
print(type(items))
print(items) # 提取节点所有内容
lis = items.find('li') # 获取符合条件的li标签
print(type(lis))
print(lis)
5、 属性获取
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a, type(a))
print(a.attr('href'))
6、 遍历提取
doc = pq(html)
a = doc('a')
for s in a.items():
print(s.attr('href')) # 属性获取
print(s.text()) # 值获取
如果您觉得本篇文章还不错,欢迎点赞,转发分享(转发请注明出处),感谢~~