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下载文件记录黑名单的实现代码
Oct 24 Python
python爬虫使用cookie登录详解
Dec 27 Python
python中的字典操作及字典函数
Jan 03 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 Python
使用pip安装python库的多种方式
Jul 31 Python
详解Python绘图Turtle库
Oct 12 Python
Python下载网易云歌单歌曲的示例代码
Aug 12 Python
使用python爬取抖音app视频的实例代码
Dec 01 Python
pycharm 的Structure界面设置操作
Feb 05 Python
Python中zipfile压缩包模块的使用
May 14 Python
这样写python注释让代码更加的优雅
Jun 02 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 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中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
深入解析php中的foreach函数
2013/08/31 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
php实现算术验证码功能
2018/12/05 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
js中开关变量使用实例
2017/02/24 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
Python程序退出方式小结
2017/12/09 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
广州某公司软件工程师面试题
2014/12/22 面试题
师范学院教师自荐书
2014/01/31 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
植树节标语
2014/06/27 职场文书
房租涨价通知
2015/04/23 职场文书
行政撤诉申请书
2015/05/18 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
MySQL常见优化方案汇总
2022/01/18 MySQL
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL