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简单的实现树莓派的WEB控制
Feb 18 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
Python3使用SMTP发送带附件邮件
Jun 16 Python
Python元组知识点总结
Feb 18 Python
python web框架 django wsgi原理解析
Aug 20 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
Selenium元素定位的30种方式(史上最全)
May 11 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
详细分析Python垃圾回收机制
Jul 01 Python
Python Http请求json解析库用法解析
Nov 28 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
Feb 20 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 05 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
简单易用的计数器(数据库)
2006/10/09 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python 列表(List)操作方法详解
2014/03/11 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
对pandas中apply函数的用法详解
2018/04/10 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
python内置模块collections知识点总结
2019/12/19 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
档案接收函
2014/01/13 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
工程质量月活动方案
2014/02/19 职场文书
公司募捐倡议书
2014/05/14 职场文书
模具专业自荐信
2014/05/29 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
孙振耀退休感言
2015/08/01 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js