PyQuery库[通俗易懂]

PyQuery库[通俗易懂]PyQuery库PyQuery库也是一个非常强大又灵活的网页解析库,PyQuery是Python仿照jQuery的严格实现。语法与jQuery几乎完全相同,所以不用再去费心去记一些奇怪的方法了。1、初始化初始化的时候一般有三种传入方式:传入字符串,传入url,传入文件字符串初始化eg1:html=”'<div><ul>…

大家好,又见面了,我是你们的朋友全栈君。

PyQuery库

PyQuery库也是一个非常强大又灵活的网页解析库,PyQuery 是 Python 仿照 jQuery 的严格实现。语法与 jQuery 几乎完全相同,所以不用再去费心去记一些奇怪的方法了。

1、初始化

初始化的时候一般有三种传入方式:传入字符串,传入url,传入文件

字符串初始化

eg1:

html = '''
<div>
    <ul>
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
</div>
'''

from pyquery import PyQuery as pq
doc = pq(html)
print(doc)
print(type(doc))
print(doc('li'))

由于PyQuery写起来比较麻烦,所以我们导入的时候都会添加别名:

from pyquery import PyQuery as pq

这里我们可以知道上述代码中的doc其实就是一个pyquery对象。

我们可以通过doc可以进行元素的选择,其实这里就是一个css选择器,所以CSS选择器的规则都可以用,直接doc(标签名)就可以获取所有的该标签的内容,如果想要获取class 则doc(’.class_name’)。

如果是id则doc(’#id_name’)…

URL初始化

eg2:

from pyquery import PyQuery as pq

doc = pq(url="http://www.baidu.com",encoding='utf-8')
print(doc('head'))

文件初始化

我们在pq()这里可以传入url参数也可以传入文件参数,当然这里的文件通常是一个html文件,例如:pq(filename=‘index.html’)

2、基本的CSS选择器

eg3:

html = '''
<div id="container">
    <ul class="list">
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))

这里我们需要注意的一个地方是doc(’#container .list li’),这里的三者之间的并不是必须要挨着,只要是层级关系就可以。

常用的CSS选择器方法:

|选择器类别             | 示例             |解释|
|--|--|--|
|.class             | .color             |选择class="color"的所有元素|
|#id                 |#info               |选择id="info"的所有元素
|*                   |*                   |选择所有元素
|element             |p                   |选择所有的p元素
|element,element     |div,p               |选择所有idv元素和所有p元素
|element element     |div p               |选择div标签内部的所有p元素
|[attribute]         |[target]            |选择带有target属性的所有元素
|[attribute=value]   |[target=_blank]     |选择target="_blank"的所有元素

3、查找元素

子元素

children,find

eg4:

html = '''
<div id="container">
    <ul class="list">
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
print(type(items))
print(items)
lis = items.find('li')
print(type(lis))
print(lis)   

从结果里我们也可以看出通过pyquery找到结果其实还是一个pyquery对象,可以继续查找,上述中的代码中的items.find(‘li’) 则表示查找ul里的所有的li标签

当然这里通过children可以实现同样的效果,并且通过.children方法得到的结果也是一个pyquery对象

li = items.children()
print(type(li))
print(li)    

同时在children里也可以用CSS选择器

li2 = items.children('.active') print(li2)

父元素

parent,parents方法

通过.parent就可以找到父元素的内容,

eg5:

html = '''
<div id="container">
    <ul class="list">
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)  

通过.parents就可以找到祖先节点的内容

eg6:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
print(type(parents))
print(parents)    

同样我们通过.parents查找的时候也可以添加css选择器来进行内容的筛选

兄弟元素

siblings

eg7:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())   

代码中doc(’.list .item-0.active’) 中的.tem-0和.active是紧挨着的,所以表示是并的关系,这样满足条件的就剩下一个了:thired item的那个标签了

这样再通过.siblings就可以获取所有的兄弟标签,当然这里是不包括自己的

同样的在.siblings()里也是可以通过CSS选择器进行筛选

4、遍历

单个元素

eg8:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)

lis = doc('li').items()
print(type(lis))
for li in lis:
    print(type(li))
    print(li)

从结果中我们可以看出通过items()可以得到一个生成器,并且我们通过for循环得到的每个元素依然是一个pyquery对象。

5、获取信息

获取属性

pyquery对象.attr(属性名)

pyquery对象.attr.属性名

eg9:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.attr('href'))
print(a.attr.href)    

获取文本

在很多时候我们是需要获取被html标签包含的文本信息,通过.text()就可以获取文本信息

eg10:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.text())    

获取html

通过.html()的方式可以获取当前标签所包含的html信息

eg11:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(li.html())

6、DOM操作

addClass、removeClass

熟悉前端操作的话,通过这两个操作可以添加和删除属性

eg12:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)       

attr,css

同样的可以通过attr给标签添加和修改属性,

如果之前没有该属性则是添加,如果有则是修改,也可以通过css添加一些css属性,这个时候,标签的属性里会多一个style属性

eg13:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.css('font-size', '14px')
print(li)

remove

有时候我们获取文本信息的时候可能并列的会有一些其他标签干扰,这个时候通过remove就可以将无用的或者干扰的标签直接删除,从而方便操作

eg13:

html = '''
<div class="wrap">
    Hello, World
    <p>This is a paragraph.</p>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
wrap = doc('.wrap')
print(wrap.text())
wrap.find('p').remove()
print(wrap.text())     
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131824.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java读取文件的四种方式

    Java读取文件的四种方式 按字节读取文件内容 按字符读取文件内容 按行读取文件内容 随机读取文件内容    publicclassReadFromFile{/***以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。*/publicstaticvoidreadFileByBytes(StringfileN…

    2022年7月26日
    6
  • 高通msm8937的BLSP学习

    高通msm8937的BLSP学习1.基础概念(1)  BusAccessModule(BAM),总线访问模块BAMisusedtomovedatato/fromtheperipheralbuffers.(2)  BAMLow-SpeedPeripheral(BLSP),低速接口的总线访问模块(3)  QUP:QualcommUniversalPeripheral,高通统一的…

    2022年10月19日
    2
  • linux下ls -l命令(即ll命令)查看文件的显示结果分析

    linux下ls -l命令(即ll命令)查看文件的显示结果分析在linux下使用“ls-l”或者“ls-al”或者“ll”命令查看文件及目录详情时,shell中会显示出好几列的信息。平时也没怎么注意过,今天忽然心血来潮想了解一下,于是整理了这篇博客,以供参考:首先给出一张典型的显示结果:下面对其中的每一列进行详细的分析:一、文件类型表示该文件的类型:“-”表示普通文件;“d”表示目录;“l”表示链接文件;“p”表示…

    2022年6月15日
    71
  • Python 京东抢购茅台脚本(亲测可用),github脚本24小时内删除

    Python 京东抢购茅台脚本(亲测可用),github脚本24小时内删除(脚本下载见文末)前两天看到有大佬在Github上开源了一个抢茅台的脚本(https://github.com/huanghyw/jd_seckill),目前已经7.7k,我前一天看的时候才1kstar,是真的火起来了。可惜,火之前:火之后:作者已经删了,多亏我本地还存了一份,不少我的读者通过此代码也抢到了茅台。所以打算还是再分享出来,限时24小时删除,仅供大家学习交流!仅供大家学习交流!仅供大家学习交流!手慢无!!!如何下载?关注我的个人公号【快学Python】回复“

    2022年6月29日
    98
  • pycharm django环境搭建_IDEA如何创建项目

    pycharm django环境搭建_IDEA如何创建项目Django是比较经典的Pythonweb框架,最近刚好在项目中用到了Django,临阵磨枪学了下,这里先总结下如何用Pycharm创建一个Django项目。1首先来说下和Javaweb框架的一些不同个人感觉:使用Javaweb框架的时候,在与数据库进行数据交互时,其实需要写一些SQL语句的,但是使用Django框架,直接通过配置,以及models中的getfilter方法调用,就…

    2022年8月29日
    3
  • 腾讯云免费SSL证书配置

    腾讯云免费SSL证书配置基于ngnix的https配置1.证书上传1)申请证书请参照官方文档,然后把已经颁发下来的证书下载下来。2)解压文件,然后把ngnix文件夹下的1_xxx.com_bundle.crt和2_xxx.com.key上传到服务器的nginx配置文件目录(上传到同一目录),如:/usr/loc…

    2025年8月29日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号