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 14 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
python使用正则筛选信用卡
Jan 27 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
Jun 27 Python
对python中GUI,Label和Button的实例详解
Jun 27 Python
python的常见矩阵运算(小结)
Aug 07 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
python中setuptools的作用是什么
Jun 19 Python
Python配置pip国内镜像源的实现
Aug 20 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中创建和调用webservice接口示例
2014/07/25 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
json的使用小结
2016/06/08 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
ajax实现动态下拉框示例
2017/01/10 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
python导入pandas具体步骤方法
2019/06/23 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
应用服务器有那些
2012/01/19 面试题
物流专业大学应届生求职信
2013/11/03 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
vue实现拖拽交换位置
2022/04/07 Vue.js
vue封装数字翻牌器
2022/04/20 Vue.js