python pyquery_python爬虫之pyquery学习

本文介绍了Python的PyQuery库,用于XML和HTML文档处理,类似jQuery。内容涵盖PyQuery的安装、基本用法,如CSS选择器、DOM操作、CSS操作,并通过实例展示了如何使用PyQuery爬取豆瓣新书信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关内容: pyquery的介绍

pyquery的使用 安装模块

导入模块

解析对象初始化

css选择器

在选定元素之后的元素再选取

元素的文本、属性等内容的获取

pyquery执行DOM操作、css操作 Dom操作

CSS操作

一个利用pyquery爬取豆瓣新书的例子

首发时间:2018-03-09 21:26

pyquery的介绍 pyquery允许对xml、html文档进行jQuery查询。

pyquery使用lxml进行快速xml和html操作。

pyquery是python中的jquery

PyQuery的使用:

1.安装模块:

pip3 install pyquery

2.导入模块:

from pyquery import PyQuery as pq

3.解析对象初始化:

【使用PyQuery初始化解析对象,PyQuery是一个类,直接将要解析的对象作为参数传入即可】

解析对象为字符串时字符串初始化 :默认情况下是字符串,如果字符串是一个带http\https前缀的,将会认为是一个url

textParse = pq(html)

解析对象为网页时url初始化: 建议使用关键字参数url=

#urlParse = pq('http://www.baidu.com') #1

urlParse = pq(url='http://www.baidu.com') #2

解析对象为文件时文件初始化:建议使用关键字参数filename=

fileParse = pq(filename="L:\demo.html")

解析完毕后,就可以使用相关函数或变量来进行筛选,可以使用css等来筛选,

4.CSS选择器:

利用标签获取:

result = textParse('h2').text()

利用类选择器:

result3=textParse(".p1").text()

利用id选择:

result4=textParse("#user").attr("type")

分组选择:

result5=textParse("p,div").text()

后代选择器:

result6=textParse("div a").attr.href

属性选择器:

result7=textParse("[class='p1']").text()

CSS3伪类选择器:

result8=textParse("p:last").text()

(更多的,可以参考css)

5.在选定元素之后的元素再选取:

find():找出指定子元素 ,find可以有参数,该参数可以是任何 jQuery 选择器的语法,

filter():对结果进行过滤,找出指定元素 ,filter可以有参数,该参数可以是任何 jQuery 选择器的语法,

children():获取所有子元素,可以有参数,该参数可以是任何 jQuery 选择器的语法,

parent():获取父元素,可以有参数,该参数可以是任何 jQuery 选择器的语法,

parents():获取祖先元素,可以有参数,该参数可以是任何 jQuery 选择器的语法,

siblings():获取兄弟元素,可以有参数,该参数可以是任何 jQuery 选择器的语法,

from pyquery importPyQuery as pqhtml="""

This is a heading

This is a paragraph.

This is another paragraph.

123

hello

"""

###初始化

textParse =pq(html)#urlParse = pq('http://www.baidu.com') #1#urlParse = pq(url='http://www.baidu.com') #2#fileParse = pq(filename="L:\demo.html")

##获取

result = textParse('h2').text()print(result)

result2= textParse('div').html()print(result2)

result3=textParse(".p1").text()print(result3)

result4=textParse("#user").attr("type")print(result4)

result5=textParse("p,div").text()print(result5)

result6=textParse("div a").attr.hrefprint(result6)

result7=textParse("[class='p1']").text()print(result7)

result8=textParse("p:last").text()print(result8)

result9=textParse("div").find("a").text()print(result9)

result12=textParse("p").filter(".p1").text()print(result12)

result10=textParse("div").children()print(result10)

result11=textParse("a").parent()print(result11)

6.元素的文本、属性等内容的获取:

attr(attribute):获取属性

result2=textParse("a").attr("href")

attr.xxxx:获取属性xxxx

result21=textParse("a").attr.href

result22=textParse("a").attr.class_

text():获取文本,子元素中也仅仅返回文本

result1=textParse("a").text()

html():获取html,功能与text类似,但返回html标签d69fd183c3beb8df5a26e999e99f17a1.png

result3=textParse("div").html()

补充1:

元素的迭代:如果返回的结果是多个元素,如果想迭代出每个元素,可以使用items():

44304fcac814cc13e99553b3a4948fb2.png

补充2:pyquery是jquery的python化,语法基本都是相通的,想了解更多,可以参考jquery。

pyquery执行DOM操作、css操作:

DOM操作:

add_class():增加class

remove_class():移除class

remove():删除指定元素

from pyquery importPyQuery as pq

html="""

This is a heading

This is a paragraph.

This is another paragraph.

123

hello

"""textParse=pq(html)

textParse('a').add_class("c1")print(textParse('a').attr("class"))

textParse('a').remove_class("c1")print(textParse('a').attr("class"))print(textParse('div').html())

textParse('div').remove("a")print(textParse('div').html())

css操作:

attr():设置属性

设置格式:attr("属性名","属性值")

css():设置css

设置格式1:css("css样式","样式值")

格式2:css({"样式1":"样式值","样式2":"样式值"})

from pyquery importPyQuery as pq

html="""

This is a heading

This is a paragraph.

This is another paragraph.

123

hello

"""textParse=pq(html)

textParse('a').attr("name","hehe")print(textParse('a').attr("name"))

textParse('a').css("color","white")

textParse('a').css({"background-color":"black","postion":"fixed"})print(textParse('a').attr("style"))

这些操作什么时候会被用到:

【有时候可能会将数据样式处理一下再存储下来,就需要用到,比如我获取下来的数据样式我不满意,可以自定义成我自己的格式】

【有时候需要逐层清理再筛选出指定结果,比如

123
中,如果仅仅想要获取123就可以先删除 再获取】

一个利用pyquery爬取豆瓣新书的例子:

先使用审查元素,定位目标元素90b401c9b4eae1d698b7583de8b3dd27.png

确认爬取信息0b2767ee290f5ab3ed339ad0e9bde2a9.png

要注意的是,豆瓣新书是有一些分在后面页的,实际上目标应该是li的上一级ul:0c702328b2c0e95e9ba83e1446bd157f.png

使用PyQuery筛选出结果:

from pyquery importPyQuery as pq

urlParse=pq(url="https://book.douban.com/")

info=urlParse("div.carousel ul li div.info")

file=open("demo.txt","w",encoding="utf8")for i ininfo.items():

title=i.find("div.title")

author=i.find("span.author")

abstract=i.find(".abstract")

file.write("标题:"+title.text()+"\n")

file.write("作者:"+author.text()+"\n")

file.write("概要:"+abstract.text()+"\n")

file.write("-----------------\n")print("\n")

file.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值