PyQuery库的基本方法和使用详解 Python爬虫常见的解析库

首页 » Python » PyQuery库的基本方法和使用详解 Python爬虫常见的解析库

今天这篇文章就来介绍一下PyQuery库,它是一个强大又灵活的网页解析库。如果你觉得写正则太麻烦,比较费力,如果你觉得BeautifulSoup语法太难记,那么PyQuery库不失为一种适合你的方法。那么还是先安装:pip3 install pyquery,比较简单,如果你使用的是Pycharm的话,直接在settings里面查找pyquery安装即可,这里你可能会因为网络原因,会安装失败,多次尝试还不行的话,可以点击pycharm左下角的Terminal,然后直接输入代码即可,这种方式一般都能够成功安装,失败的话,再次尝试即可!

PyQuery初始化

字符串初始化

同样我们需要传一个html字符串,就是网页中的html标签,这里随便寻找一个即可。这种其实也可以使用CSS选择器,如果是id的话就采用#,如果是class的话就使用.

from pyquery import PyQuery as py #用py简化PyQuery的写法
ddos=py(html)  #声明为PyQuery对象
print(ddos('li')) #寻找所有的li标签

URL初始化

from pyquery import PyQuery as py
ddos=py(url='http://www.baidu.com')
print(ddos('head'))

文本初始化

from pyquery import PyQuery as py
ddos=py(filename='本地文件名称')
print(ddos('head'))

这种方法可以传入文件来进行筛选,前提时,你的本地是有文件的,我这里没有,就不在尝试了

PyQuery中基本CSS选择器

from pyquery import PyQuery as py
ddos=py(html)
print(ddos('#focusslide h2')) #查找id=focusslide下的li标签

上面的代码会查找id=’focusslide,h2标签的内容,用空格代表嵌套关系’

PyQuery中查找元素

子元素

from pyquery import PyQuery as py
ddos=py(html)
items=ddos('.carousel-indicators')  #找到的是ol标签
print(type(items)) #<class 'pyquery.pyquery.PyQuery'>
lis=items.find('li') #可以使用嵌套的方式寻找ol标签的li标签
print(type(lis))  #<class 'pyquery.pyquery.PyQuery'>
print(lis)

find方法可以查找所有符合条件的子元素,这里还有一种方法children( ),查找它所有的直接子元素

from pyquery import PyQuery as py
ddos=py(html)
items=ddos.find('ol')
lis=items.children()
abc=items.children('.active')
print(lis)
print(abc)

from pyquery import PyQuery as py
ddos=py(html)
items=ddos.find('li')
lis=items.parent()  #获取li标签的父节点
abc=items.parents()  #查找所有的祖先节点,不管是父元素还是往上一层,都会查找到
cc=items.parents('.carousel-indicators')  #这种写法可以更加准确的查找
print(abc)
print(lis)

兄弟元素

from pyquery import PyQuery as py
ddos=py(html)
li=ddos('.carousel-indicators li')
print(li.siblings('.active'))

很多方法后面可能用的比较少,简单做一下了解

PyQuery中的遍历

单个元素或者多个元素

from pyquery import PyQuery as py
ddos=py(html)
li=ddos('h2')  #获取单个元素
print(li)
lis=ddos('li').items()  #<class 'generator'>
for i in lis:   #.items()方法产生一个生成器,用for循环一次遍历
    print(i)
#如果获取的元素是多个,就需要对每个元素进行操作,
# 这时候就可以采用.items()方法

PyQuery中获取信息

获取属性和文本

from pyquery import PyQuery as py
ddos=py(html)
li=ddos('p')  #寻找p标签
print(li.attr('style'))  #获取p标签的style属性
print(li.text())  #获取p标签的文本
print(li)

获取HTML

from pyquery import PyQuery as py
ddos=py(html)
li=ddos('#focusslide') #获取网页里面html代码的文章
print(li.html())

PyQuery中的DOM操作

addClass、removeClass

from pyquery import PyQuery as py
ddos=py(html)
li=ddos('.carousel-indicators')
print(li)
li.removeClass('carousel-indicators') #移除属性
print(li)
li.addClass('active') #修改为active
print(li)
print('--------------------------------------------')

li.remove_class('active')
print(li)
li.add_class('e1yu')
print(li)

这是两种不同的写法,结果都一样,第一种的C需要大写,否则会报错,注意就行.

attr、css

from pyquery import PyQuery as py
ddos=py(html)
li=ddos('.carousel-indicators')
li.attr('name','e1yu')    #第一个参数为属性,第二个参数为属性值
print(li)
li.css('font-size','12px')  #只能加html中的style,其他的不行
print(li)

remove

这里我从新设置了html字符串

html=''' <div class="box__content">
            Welcome to ZJJboke,please happy
			<h1 class="box__title h2">Welcome Back</h1>
        '''
from pyquery import PyQuery as py
ddos=py(html)
cc=ddos('.box__content')
print(cc.text())   #div标签里面还有一个h1标签,这不是我们想要的
print('--------------')
cc.find('h1').remove()  #采用这种方法来吧h1标签剔除掉
print(cc.text())

其他DOM方法:官方文档

PyQuery中的伪类选择器

伪类,如果你了解HTML代码或者CSS的话,这个应该不陌生。

from pyquery import PyQuery as py
ddos=py(html)
li=ddos('li:first-child')  #查询第一个li标签
lis=ddos('li:last-child')  #查询最后一个li标签
abc=ddos('li:nth-child(2)')  #查找第二个li标签
defg=ddos('li:gt(2)')    #获取比2大的li标签
opq=ddos('li:contains(文章)')  #获取包含文章的li标签
rst=ddos('li:nth-child(2n)')  #获取偶数的li标签

想了解更多参考pyquery的官方文档

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《PyQuery库的基本方法和使用详解 Python爬虫常见的解析库》 发布于2019-11-27

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

7 + 5 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册