|
PyQuery是一个类似于jQuery的Python库,也可以说是jQuery在Python上的实现,能够以 jQuery 的语法来操作解析 HTML 文档,易用性和解析速度都很好。
例如,一段豆瓣html片段http://movie.douban.com/subject/3530403/
1
2 导演: 汤姆·提克威 / 拉娜·沃卓斯基 / 安迪·沃卓斯基
3 编剧: 汤姆·提克威 / 安迪·沃卓斯基 / 拉娜·沃卓斯基
4 主演: 汤姆·汉克斯 / 哈莉·贝瑞 / 吉姆·布劳德本特 / 雨果·维文 / 吉姆·斯特吉斯 / 裴斗娜 / 本·卫肖 / 詹姆斯·达西 / 周迅 / 凯斯·大卫 / 大卫·吉雅西 / 苏珊·萨兰登 / 休·格兰特
5 类型: 剧情 / 科幻 / 悬疑
6 官方网站: cloudatlas.warnerbros.com
7 制片国家/地区: 德国 / 美国 / 香港 / 新加坡
8 语言: 英语
9 上映日期: 2013-01-31(中国大陆) / 2012-10-26(美国)
10 片长: 134分钟(中国大陆) / 172分钟(美国)
11
12 IMDb链接: tt1371111
13
14 官方小站:
15 电影《云图》
16
View Code
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链接:
官方小站:
用起来很像jQuery吧。
用法
用户可以使用PyQuery类从字符串、lxml对象、文件或者url来加载xml文档:
>>> from pyquery import PyQuery as pq
>>> from lxml import etree
>>> doc=pq("")
>>> doc=pq(etree.fromstring(""))
>>> doc=pq(filename=path_to_html_file)
>>> doc=pq(url='http://movie.douban.com/subject/3530403/')
可以像jQuery一样选择对象了
>>> doc('.pl')
[, , , , , , , , , , , , , , , , , , , ]
这样,class为'pl'的对象就全部选择出来了。
不过在使用迭代时需要对文本进行重新封装:
for para in doc('.pl'):
para=pq(para)
print para.text()
导演
编剧
主演
类型:
官方网站:
制片国家/地区:
语言:
上映日期:
片长:
IMDb链接:
官方小站:
这里得到的text是unicode码,如果要写入文件需要编码为字符串。
用户可以使用jquery提供的一些伪类(但还不支持css)来进行操作,诸如:
>>> doc('.pl:first')
[]
>>> print doc('.pl:first').text()
导演
Attributes
获取html元素的属性
>>> p=pq('')('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')
[]
Traversing
过滤
>>> d=pq('helloworld')
>>> d('p').filter('.hello')
[]
>>> d('p').filter('#test')
[]
>>> d('p').filter(lambda i:i==1)
[]
>>> d('p').filter(lambda i:i==0)
[]
>>> d('p').filter(lambda i:pq(this).text()=='hello')
[]
按照顺序选择
>>> d('p').eq(0)
[]
>>> d('p').eq(1)
[]
选择内嵌元素
>>> d('p').eq(1).find('a')
[]
选择父元素
>>> d=pq('Whoah! there')
>>> d('p').eq(1).find('em')
[]
>>> d('p').eq(1).find('em').end()
[]
>>> d('p').eq(1).find('em').end().text()
'there'
>>> d('p').eq(1).find('em').end().end()
[, ]
下载:http://pypi.python.org/pypi/pyquery
文档:http://packages.python.org/pyquery/
选择器总结:http://www.iyunv.com/onlys/articles/jQuery.html |
|
|