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文件及目录操作实例详解
Jun 04 Python
Python优先队列实现方法示例
Sep 21 Python
Python实现全排列的打印
Aug 18 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
python 机器学习之支持向量机非线性回归SVR模型
Jun 26 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
python实现socket+threading处理多连接的方法
Jul 23 Python
Python Django框架模板渲染功能示例
Nov 08 Python
Python批量启动多线程代码实例
Feb 18 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
Python 中Operator模块的使用
Jan 30 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 面向对象 final类与final方法
2010/05/05 PHP
php常用Stream函数集介绍
2013/06/24 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
js监听键盘事件示例代码
2013/07/26 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
js实现简单模态框实例
2018/11/16 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
Python随机数函数代码实例解析
2020/02/09 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
python 模拟登录B站的示例代码
2020/12/15 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
C语言笔试题
2014/09/04 面试题
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
大学生收银员求职信分享
2014/01/02 职场文书
高三毕业寄语
2014/04/10 职场文书
单位授权委托书范文
2014/08/02 职场文书
离婚协议书范文
2015/01/26 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
python中的3种定义类方法
2021/11/27 Python