PyQuery是二个像样于jQuery的Python库,也得以说是jQuery在Python上的兑现,可以以
jQuery 的语法来操作解析 HTML 文档,易用性和分析速度都很好。

譬如说,一段豆瓣html片段http://movie.douban.com/subject/3530403/

图片 1图片 2

 1 <div id="info">
 2         导演: <a href="/celebrity/1047989/" rel="v:directedBy">汤姆·提克威</a> / <a href="/celebrity/1161012/" rel="v:directedBy">拉娜·沃卓斯基</a> / <a href="/celebrity/1013899/" rel="v:directedBy">安迪·沃卓斯基</a><br/>
 3         编剧: <a href="/celebrity/1047989/">汤姆·提克威</a> / <a href="/celebrity/1013899/">安迪·沃卓斯基</a> / <a href="/celebrity/1161012/">拉娜·沃卓斯基</a><br/>
 4         主演: <a href="/celebrity/1054450/" rel="v:starring">汤姆·汉克斯</a> / <a href="/celebrity/1054415/" rel="v:starring">哈莉·贝瑞</a> / <a href="/celebrity/1019049/" rel="v:starring">吉姆·布劳德本特</a> / <a href="/celebrity/1040994/" rel="v:starring">雨果·维文</a> / <a href="/celebrity/1053559/" rel="v:starring">吉姆·斯特吉斯</a> / <a href="/celebrity/1057004/" rel="v:starring">裴斗娜</a> / <a href="/celebrity/1025149/" rel="v:starring">本·卫肖</a> / <a href="/celebrity/1049713/" rel="v:starring">詹姆斯·达西</a> / <a href="/celebrity/1027798/" rel="v:starring">周迅</a> / <a href="/celebrity/1019012/" rel="v:starring">凯斯·大卫</a> / <a href="/celebrity/1201851/" rel="v:starring">大卫·吉雅西</a> / <a href="/celebrity/1054392/" rel="v:starring">苏珊·萨兰登</a> / <a href="/celebrity/1003493/" rel="v:starring">休·格兰特</a><br/>
 5         类型: 剧情 / 科幻 / 悬疑<br/>
 6         官方网站: <a href="http://cloudatlas.warnerbros.com" rel="nofollow" target="_blank">cloudatlas.warnerbros.com</a><br/>
 7         制片国家/地区: 德国 / 美国 / 香港 / 新加坡<br/>
 8         语言: 英语<br/>
 9         上映日期: 2013-01-31(中国大陆) / 2012-10-26(美国)<br/>
10         片长: 134分钟(中国大陆) / 172分钟(美国)<br/>
11         
12         IMDb链接: <a href="http://www.imdb.com/title/tt1371111" target="_blank" rel="nofollow">tt1371111</a><br>
13 
14         官方小站:
15         <a href="http://site.douban.com/202494/" target="_blank">电影《云图》</a>
16 </div>

View Code

from pyquery import PyQuery as pq
doc=pq(url='http://movie.douban.com/subject/3530403/')
data=doc('.pl')
for i in data:
    print pq(i).text()

 输出

导演
编剧
主演
类型:
官方网站:
制片国家/地区:
语言:
上映日期:
片长:
IMDb链接:
官方小站:

  用起来很像jQuery吧。

用法

     用户可以行使PyQuery类从字符串、lxml对象、文件或许url来加载xml文档:

>>> from pyquery import PyQuery as pq
>>> from lxml import etree
>>> doc=pq("<html></html>")
>>> doc=pq(etree.fromstring("<html></html>"))
>>> doc=pq(filename=path_to_html_file)
>>> doc=pq(url='http://movie.douban.com/subject/3530403/')

  可以像jQuery一样选取对象了

>>> doc('.pl')
[, , , , , , , , , , , , , , , , , , , <p.pl>]

  那样,class为’pl’的对象就全部抉择出来了。

     然则在行使迭代时要求对文件举办重复包装:

for para in doc('.pl'):
    para=pq(para)
    print para.text()   
导演
编剧
主演
类型:
官方网站:
制片国家/地区:
语言:
上映日期:
片长:
IMDb链接:
官方小站:

  这里收获的text是unicode码,如若要写入文件需求编码为字符串。

     用户可以运用jquery提供的一部分伪类(但还不支持css)来进行操作,诸如:

>>> doc('.pl:first')
[]
>>> print  doc('.pl:first').text()
导演

Attributes

    获取html成分的属性

>>> p=pq('<p id="hello" class="hello"></p>')('p')
>>> p.attr('id')
'hello'
>>> p.attr.id
'hello'
>>> p.attr['id']
'hello'

  赋值

>>> p.attr.id='plop'
>>> p.attr.id
'plop'
>>> p.attr['id']='ola'
>>> p.attr.id
'ola'
>>> p.attr(id='hello',class_='hello2')
[<p#hello.hell0>]

Traversing

     过滤

>>> d=pq('<p id="hello" class="hello"><a/>hello</p><p id="test"><a/>world</p>')
>>> d('p').filter('.hello')
[<p#hello.hello>]
>>> d('p').filter('#test')
[<p#test>]
>>> d('p').filter(lambda i:i==1)
[<p#test>]
>>> d('p').filter(lambda i:i==0)
[<p#hello.hello>]
>>> d('p').filter(lambda i:pq(this).text()=='hello')
[<p#hello.hello>]

  根据顺序选用

>>> d('p').eq(0)
[<p#hello.hello>]
>>> d('p').eq(1)
[<p#test>]

  选取内嵌成分

>>> d('p').eq(1).find('a')
[<a>]

  采纳父成分

>>> d=pq('<p><em>Whoah!</em></p><p><em> there</em></p>')
>>> d('p').eq(1).find('em')
[<em>]
>>> d('p').eq(1).find('em').end()
[<p>]
>>> d('p').eq(1).find('em').end().text()
'there'
>>> d('p').eq(1).find('em').end().end()
[<p>, <p>]

  

下载:http://pypi.python.org/pypi/pyquery

文档:http://packages.python.org/pyquery/

选拔器统计:http://www.cnblogs.com/onlys/articles/jQuery.html

相关文章

网站地图xml地图