前端大大们的福音来了,PyQuery 来了,如果你对 jQuery 熟悉,那么 PyQuery 来解析文档就是不二之选!
PyQuery 是 Python 仿照 jQuery 的严格实现。语法与 jQuery 几乎完全相同
pip install pyquery
本文内容参考官方文档:官方文档
pyquery 可让你用 jQuery 的语法来对 xml 进行操作。这I和 jQuery 十分类似。如果利用 lxml,pyquery 对 xml 和 html 的处理将更快。
这个库不是(至少还不是)一个可以和 JavaScript交互的代码库,它只是非常像 jQuery API 而已。
四种初始化。
(1)直接字符串
from pyquery import PyQuery as pq
doc = pq("")
(2)lxml.etree
from lxml import etree
doc = pq(etree.fromstring(""))
可以首先用 lxml 的 etree 处理一下代码,这样如果你的 HTML 代码出现一些不完整或者疏漏,
都会自动转化为完整清晰结构的 HTML代码。
(3)直接传URL
from pyquery import PyQuery as pq
doc = pq('http://www.baidu.com')
(4)传文件
from pyquery import PyQuery as pq
doc = pq(filename='hello.html')
hello.html 文件
- first item
- second item
- third item
- fourth item
- fifth item
from pyquery import PyQuery as pq
doc = pq(filename='hello.html')
print doc.html()
print type(doc)
li = doc('li')
print type(li)
print li.text()
运行结果
- first item
- second item
- third item
- fourth item
- fifth item
first item second item third item fourth item fifth item
PyQuery 初始化之后,返回类型是 PyQuery,利用了选择器筛选一次之后,返回结果的类型依然还是 PyQuery。而 BeautifulSoup 和 XPath 返回的是什么?列表!一种不能再进行二次筛选的对象!
你可以完全按照 jQuery 的语法来进行 PyQuery 的操作。
from pyquery import PyQuery as pq
p = pq('')('p')
print p.attr("id")
print p.attr("id", "plop")
print p.attr("id", "hello")
运行结果
hello
再来一发
from pyquery import PyQuery as pq
p = pq('')('p')
print p.addClass('beauty')
print p.removeClass('hello')
print p.css('font-size', '16px')
print p.css({'background-color': 'yellow'})
运行结果
p 本身也发生了变化。
from pyquery import PyQuery as pq
p = pq('')('p')
print p.append(' check out reddit')
print p.prepend('Oh yes!')
d = pq('')
p.prependTo(d('#test'))
print p
print d
d.empty()
print d
运行结果
check out reddit
Oh yes! check out reddit
Oh yes! check out reddit
DOM 操作也是与 jQuery 如出一辙。
遍历用到 items 方法返回对象列表,或者用 lambda。最常用的还是 items 方法
from pyquery import PyQuery as pq
doc = pq(filename='hello.html')
lis = doc('li')
for li in lis.items():
print li.html()
print lis.each(lambda e: e)
运行结果
first item
second item
third item
fourth item
fifth item
first item
second item
third item
fourth item
fifth item
PyQuery 本身还有网页请求功能,而且会把请求下来的网页代码转为 PyQuery 对象。
from pyquery import PyQuery as pq
print pq('http://cuiqingcai.com/', headers={'user-agent': 'pyquery'})
print pq('http://httpbin.org/post', {'foo': 'bar'}, method='post', verify=True)
GET,POST,样样通。
PyQuery 同样支持 Ajax 操作,带有 get 和 post 方法,不过不常用,一般我们不会用 PyQuery 来做网络请求,仅仅是用来解析。
PyQueryAjax
最后少不了的,API大放送。
API
如果你对 jQuery 语法不熟,强烈建议先学习下 jQuery,再回来看 PyQuery!