python解析html开发库pyquery使用方法


Posted in Python onFebruary 07, 2014

例如

<div id="info">
<span><span class='pl'>导演</span>: <a href="/celebrity/1047989/" rel="v:directedBy">汤姆·提克威</a> / <a href="/celebrity/1161012/" rel="v:directedBy">拉娜·沃卓斯基</a> / <a href="/celebrity/1013899/" rel="v:directedBy">安迪·沃卓斯基</a></span><br/>
<span><span class='pl'>编剧</span>: <a href="/celebrity/1047989/">汤姆·提克威</a> / <a href="/celebrity/1013899/">安迪·沃卓斯基</a> / <a href="/celebrity/1161012/">拉娜·沃卓斯基</a></span><br/>
<span><span class='pl'>主演</span>: <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></span><br/>
<span class="pl">类型:</span> <span property="v:genre">剧情</span> / <span property="v:genre">科幻</span> / <span property="v:genre">悬疑</span><br/>
<span class="pl">官方网站:</span> <a href="http://cloudatlas.warnerbros.com" rel="nofollow" target="_blank">cloudatlas.warnerbros.com</a><br/>
<span class="pl">制片国家/地区:</span> 德国 / 美国 / 香港 / 新加坡<br/>
<span class="pl">语言:</span> 英语<br/>
<span class="pl">上映日期:</span> <span property="v:initialReleaseDate" content="2013-01-31(中国大陆)">2013-01-31(中国大陆)</span> / <span property="v:initialReleaseDate" content="2012-10-26(美国)">2012-10-26(美国)</span><br/>
<span class="pl">片长:</span> <span property="v:runtime" content="134">134分钟(中国大陆)</span> / 172分钟(美国)<br/>
<span class="pl">IMDb链接:</span> <a href="http://www.imdb.com/title/tt1371111" target="_blank" rel="nofollow">tt1371111</a><br>
<span class="pl">官方小站:</span>
<a href="http://site.douban.com/202494/" target="_blank">电影《云图》</a>
</div>
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链接:
官方小站:

用法

用户可以使用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')
[<span.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <span#rateword.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <span.pl>, <p.pl>]

这样,class为'pl'的对象就全部选择出来了。

不过在使用迭代时需要对文本进行重新封装:

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

这里得到的text是unicode码,如果要写入文件需要编码为字符串。
用户可以使用jquery提供的一些伪类(但还不支持css)来进行操作,诸如:

>>> doc('.pl:first')
[<span.pl>]
>>> 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><span><em>Whoah!</em></span></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>]
Python 相关文章推荐
Python 学习笔记
Dec 27 Python
Python实现提取文章摘要的方法
Apr 21 Python
Python实现的数据结构与算法之链表详解
Apr 22 Python
举例讲解Python中装饰器的用法
Apr 27 Python
Python优先队列实现方法示例
Sep 21 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
python实现简单聊天室功能 可以私聊
Jul 12 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
python中return如何写
Jun 18 Python
python文件及目录操作代码汇总
Jul 08 Python
Python图片检索之以图搜图
May 31 Python
python3.3实现乘法表示例
Feb 07 #Python
zbar解码二维码和条形码示例
Feb 07 #Python
python命令行参数sys.argv使用示例
Jan 28 #Python
python删除文件示例分享
Jan 28 #Python
python list转dict示例分享
Jan 28 #Python
python使用os模块的os.walk遍历文件夹示例
Jan 27 #Python
python目录操作之python遍历文件夹后将结果存储为xml
Jan 27 #Python
You might like
php IP及IP段进行访问限制的代码
2008/12/17 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
初识Node.js
2015/03/20 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
Python fileinput模块使用实例
2015/05/28 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
大学四年的个人自我评价
2014/01/14 职场文书
宿舍卫生检讨书
2014/01/16 职场文书
小学敬老月活动方案
2014/02/11 职场文书
高中打架检讨书
2014/02/13 职场文书
《小草和大树》教学反思
2014/02/16 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle