python解析html开发库pyquery使用方法

例如

代码如下:

导演: 汤姆·提克威 / 拉娜·沃卓斯基 / 安迪·沃卓斯基编剧: 汤姆·提克威 / 安迪·沃卓斯基 / 拉娜·沃卓斯基主演: 汤姆·汉克斯 / 哈莉·贝瑞 / 吉姆·布劳德本特 / 雨果·维文 / 吉姆·斯特吉斯 / 裴斗娜 / 本·卫肖 / 詹姆斯·达西 / 周迅 / 凯斯·大卫 / 大卫·吉雅西 / 苏珊·萨兰登 / 休·格兰特类型: 剧情 / 科幻 / 悬疑官方网站: cloudatlas.warnerbros.com制片国家/地区: 德国 / 美国 / 香港 / 新加坡语言: 英语上映日期: 2013-01-31(中国大陆) / 2012-10-26(美国)片长: 134分钟(中国大陆) / 172分钟(美国)imdb链接: tt1371111官方小站:电影《云图》

代码如下:

from pyquery import pyquery as pqdoc=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(“”)>>> 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.>>> p.attr.id’plop’>>> p.attr[‘id’]=’ola’>>> p.attr.id’ola’>>> p.attr(,class_=’hello2′)[]

traversing过滤

代码如下:

>>> d=pq(‘

hello

world

‘)>>> 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()[

,

]

Posted in 未分类

发表评论