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中的eval()、exec()及其相关函数
Dec 20 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
Aug 01 Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
Python短信轰炸的代码
Mar 25 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
Pytorch十九种损失函数的使用详解
Apr 29 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
解决TensorFlow调用Keras库函数存在的问题
Jul 06 Python
python绘制汉诺塔
Mar 01 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使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python正则表达式的使用范例详解
2014/08/08 Python
Windows下安装python2和python3多版本教程
2017/03/30 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
Python二元算术运算常用方法解析
2020/09/15 Python
python中PyQuery库用法分享
2021/01/15 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
幼儿园教师考核制度
2014/02/01 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
税务会计岗位职责
2015/04/02 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书