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 list转dict示例分享
Jan 28 Python
Python入门篇之文件
Oct 20 Python
Python计算一个文件里字数的方法
Jun 15 Python
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
numpy求平均值的维度设定的例子
Aug 24 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
如何基于python测量代码运行时间
Dec 25 Python
Pytorch的mean和std调查实例
Jan 02 Python
Python enumerate内置库用法解析
Feb 24 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
Python数据分析之pandas函数详解
Apr 21 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
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
php miniBB中文乱码问题解决方法
2008/11/25 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
2017/04/24 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现的希尔排序算法实例
2015/07/01 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
对Python w和w+权限的区别详解
2019/01/23 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
Python调用C/C++的方法解析
2020/08/05 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
无故旷工检讨书
2014/01/26 职场文书
离职报告格式
2014/11/04 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python