设为首页 收藏本站
查看: 762|回复: 0

[经验分享] Python解析HTML的开发库pyquery

[复制链接]

尚未签到

发表于 2015-4-21 08:51:50 | 显示全部楼层 |阅读模式
  PyQuery是一个类似于jQuery的Python库,也可以说是jQuery在Python上的实现,能够以 jQuery 的语法来操作解析 HTML 文档,易用性和解析速度都很好。
  例如,一段豆瓣html片段http://movie.douban.com/subject/3530403/


DSC0000.gif DSC0001.gif


1
2         导演: 汤姆·提克威 / 拉娜·沃卓斯基 / 安迪·沃卓斯基
3         编剧: 汤姆·提克威 / 安迪·沃卓斯基 / 拉娜·沃卓斯基
4         主演: 汤姆·汉克斯 / 哈莉·贝瑞 / 吉姆·布劳德本特 / 雨果·维文 / 吉姆·斯特吉斯 / 裴斗娜 / 本·卫肖 / 詹姆斯·达西 / 周迅 / 凯斯·大卫 / 大卫·吉雅西 / 苏珊·萨兰登 / 休·格兰特
5         类型: 剧情 / 科幻 / 悬疑
6         官方网站: cloudatlas.warnerbros.com
7         制片国家/地区: 德国 / 美国 / 香港 / 新加坡
8         语言: 英语
9         上映日期: 2013-01-31(中国大陆) / 2012-10-26(美国)
10         片长: 134分钟(中国大陆) / 172分钟(美国)
11         
12         IMDb链接: tt1371111
13
14         官方小站:
15         电影《云图》
16
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("")
>>> doc=pq(etree.fromstring(""))
>>> doc=pq(filename=path_to_html_file)
>>> doc=pq(url='http://movie.douban.com/subject/3530403/')

  可以像jQuery一样选择对象了



>>> doc('.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')
>>> 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')
[]

Traversing
  过滤



>>> d=pq('helloworld')
>>> d('p').filter('.hello')
[]
>>> d('p').filter('#test')
[]
>>> d('p').filter(lambda i:i==1)
[]
>>> d('p').filter(lambda i:i==0)
[]
>>> d('p').filter(lambda i:pq(this).text()=='hello')
[]
  按照顺序选择



>>> d('p').eq(0)
[]
>>> d('p').eq(1)
[]

  选择内嵌元素



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

  选择父元素



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

  
  下载:http://pypi.python.org/pypi/pyquery
  文档:http://packages.python.org/pyquery/
  选择器总结:http://www.iyunv.com/onlys/articles/jQuery.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59072-1-1.html 上篇帖子: 简述Python模块和包 下篇帖子: Python标准库07 信号 (signal包,部分os包)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表