1 简介
今天介绍的工具是Pyquery,没错,就是jquery的表哥,是用于python的jquery类库。pyquery允许您在xml文档上进行jquery查询。API类似于jquery。pyquery使用lxml进行快速xml和html操作。 Pyquery官方文档 jQuery中文在线手册
2 安装
pip安装
pip install pyquery
pycharm安装看以前的文章能找到(略)
3 初始化
您可以使用PyQuery类从一个字符串、一个lxml文档,从一个文件或一个url四种方式初始化,分别举例:
>>> from pyquery import PyQuery as pq
>>> from lxml import etree
>>> import urllib
>>> d = pq("<html></html>") # 字符串
>>> d = pq(etree.fromstring("<html></html>")) # lxml文档
>>> d = pq(url='http://google.com/') # url
>>> d = pq(filename=path_to_html_file) # 文件
4 快速开始
快速体验 以从一个文件方式初始化,文件名‘index.html’,文件内容如下:
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a rel="nofollow" href="link2.html">second item</a></li>
<li class="item-0 active"><a rel="nofollow" href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a rel="nofollow" href="link4.html">fourth item</a></li>
<li class="item-0"><a rel="nofollow" href="link5.html">fifth item</a></li>
</ul>
</div>
编写程序如下:
# -*- coding: utf-8 -*-
from pyquery import PyQuery as pq
doc = pq(filename='index.html')
print(doc.html())
print(type(doc))
li = doc('li')
print(type(li))
print(li.text())
运行结果如下:
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a rel="nofollow" href="link2.html">second item</a></li>
<li class="item-0 active"><a rel="nofollow" href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a rel="nofollow" href="link4.html">fourth item</a></li>
<li class="item-0"><a rel="nofollow" href="link5.html">fifth item</a></li>
</ul>
<class 'pyquery.pyquery.PyQuery'>
<class 'pyquery.pyquery.PyQuery'>
first item second item third item fourth item fifth item
属性操作
p = '<img src="http://static.firefoxchina.cn/img/201712/5_5a459650ed4440.jpg" class="21">'
doc = pq(p)
print(doc.attr('class', '21'))
print(doc.attr('src'))
print(doc.remove_attr('src'))
print(doc.remove_class('21'))
print(doc.add_class('22'))
print(doc.css('font-size', '16px'))
print(doc.css('backgroupd-color', 'red'))
结果:
<img src="http://static.firefoxchina.cn/img/201712/5_5a459650ed4440.jpg" class="21"/>
http://static.firefoxchina.cn/img/201712/5_5a459650ed4440.jpg
<img class="21"/>
<img class=""/>
<img class="22"/>
<img class="22" style="font-size: 16px"/>
<img class="22" style="font-size: 16px; backgroupd-color: red"/>
发现和jquery操作基本一样,只不过doc相当于$,而且通过上面例子也可以看出p一直是在原来结果上变化的。 DOM
p = '<p>I would like to say:</p>'
doc = pq(p)
a = doc.append('<b>Hello a</b>')
print(a)
b = doc.prepend('<b>Hello b</b>')
print(b)
DOM 操作也是与 jQuery 一样。 遍历
d = pq('<div><span>foo</span><span>bar</span></div>')
print([i.text() for i in d.items('span')])
通过items获取列表内容进行循环,结果如下:
['foo', 'bar']
api 更多内容api
其实要搞好这一章,还是需要去看看jquery,看完之后再回过头来看pyquery,会好很多。 部分内容摘自:崔庆才的个人博客