这一篇整理一下pyquery这个解析库。还是菜,若有错误的地方,欢迎大家随时指正。。。。。。。(come on.......)

pyquery:是一个css选择器,再使用时,也需要传入HTML文本来初始化一个PyQuery对象。但它的初始化方式有多种,比如直接传入字符串,传入URL,传入文件名,等等。还是先声明一下那个html字符串。

  1. html = '''
  2. <div id="container">
  3. <ul class="list">
  4. <li class="item-0">first item</li>
  5. <li class="item-1"><a href="link2.html">second item</a></li>
  6. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  7. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  8. <li class="item-0"><a href="link5.html">fifth item</a></li>
  9. </ul>
  10. <ul class="list">
  11. <li class="item-0">first item</li>
  12. <li class="item-1"><a href="link2.html">second item</a></li>
  13. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  14. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  15. <li class="item-0"><a href="link5.html">fifth item</a></li>
  16. </ul>
  17. </div>
  18. '''

(1)建立文档树:

字符串初始化:

  1. from pyquery import PyQuery as pq
  2. pq_tree = pq(html)

第一行,从pyquery里面引入PyQuery类,并起别名为pq,第二行,直接把字符串放在pq后面,这样就建立了文档树

url初始化:初始化的参数不仅可以以字符串的形式传递,还可以传入网页的URL,此时只需要指定参数为url即可。举个栗子

  1. from pyquery import PyQuery as pq
  2. doc = pq(url='https://www.baidu.com')

文件初始化:除了传递URL,还可以传递本地的文件名,此时将参数指定为filename即可。举个例子

from pyquery import PyQuery as pq

doc = pq(filename='baidu.html')
print(doc('li'))
 
(2)css选择器:用一个实例来感受pyquery的CSS选择器的用法
  1. pq_tree = pq(html)
  2. ul_list = pq_tree('#container .list li')
  3. print(ul_list)
  4. print(type(ul_list))
  5.  
  6. 输出结果如下:
    <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>
         <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>
         
    <class 'pyquery.pyquery.PyQuery'>

第一行,用字符串的方法建立了文档树,第二行代码表示的是再这个文档树中先搜索出id属性为container 的标签,然后再找到下面class属性为list 的标签,并找出里面所有的li标签

第四行,用type查看ul_list的类型,可以看到,是一个PyQuery的对象。

(3)遍历:刚才可以观察到,pyquery的选择结果可能是多个节点,也可能是单个节点,类型都是PyQuery类型,并没有返回像Beautiful Soup那样的列表。对于多个节点的结果,我们需要遍历来获取了。遍历是使用items()方法

  1. pq_tree = pq(html)
  2. ul_list = pq_tree('#container .list')
  3. for ul in ul_list.items():
  4. print('*'*50)
  5. print(type(ul))
  6. print('*'*50)
  7. li_list = ul('li')
  8. for li in li_list.items():
  9. print(li, end='')
  10.  
  11. 输出结果如下:
    **************************************************
    <class 'pyquery.pyquery.PyQuery'>
    **************************************************
    <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>
    **************************************************
    <class 'pyquery.pyquery.PyQuery'>
    **************************************************
    <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>

上面的代码是遍历出li标签

第二行,利用属性选择找出了两个ul标签,第三行,再利用for循环遍历的时候,我们再ul_list后面加了items()方法,这就让ul_list变成了一个生成器,逐个得到ul节点对象。然后第五行,利用type查看ul的类型,是PyQuery类型,第七行,在ul标签里面搜索出所有的li标签,赋值给li_list对象,第八行,对li_list使用items(),遍历出每个ul标签里面的li标签。当然,你也可以直接找到ul下所有的li标签,然后运用items()方法进行遍历,像这样:

  1. pq_tree = pq(html)
  2. li_list = pq_tree('#container .list li')
  3. for li in li_list.items():
  4. print(li, end='')

(4):查找子节点,并根据属性过滤。

上面那种方法,能帮助我们获取一个节点内指定的子节点,但却无法根据属性进行guol,比如:只需要class属性为item-0的li标签。这时,我们可以用find()方法:

  1. pq_tree = pq(html)
  2. ul_list = pq_tree('#container .list')
  3. li_list = ul_list.find('.item-0')
  4. for li in li_list.items():
  5. print(li, end='')
  6.  
  7. 输出结果如下:
    <li class="item-0">first item</li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         <li class="item-0">first item</li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>

第二行代码,找到两个ul标签,第三行中,在ul中找到所有class属性为item-0的li标签,第四行,利用items()方法对结果进行遍历输出

(5)获取文本和属性:获取节点之后的另一个主要操作就是获取其内部的文本和属性了,此时可以调用text()方法和attrs()方法来实现。稍微改一下上面的代码

  1. pq_tree = pq(html)
  2. ul_list = pq_tree('#container .list')
  3. li_list = ul_list.find('.item-0')
  4. for li in li_list.items():
  5. print('文本内容是:',li.text(), '\t', 'class属性是:',li.attr('class'))
  6.  
  7. 输出结果是:
    文本内容是: first item      class属性是: item-0
    文本内容是: third item      class属性是: item-0 active
    文本内容是: fifth item      class属性是: item-0
    文本内容是: first item      class属性是: item-0
    文本内容是: third item      class属性是: item-0 active
    文本内容是: fifth item      class属性是: item-0

有很多没说到的地方,应该也有一些我没发觉的错误,欢迎大家随时指正。。。。参考文章:https://cuiqingcai.com/5551.html

******************************不积跬步,无以至千里。******************************

pyquery解析库的更多相关文章

  1. 【Python爬虫】PyQuery解析库

    PyQuery解析库 阅读目录 初始化 基本CSS选择器 查找元素 遍历 获取信息 DOM操作 伪类选择器 PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎 ...

  2. Python3 BeautifulSoup和Pyquery解析库随笔

    BeautifuSoup和Pyquery解析库方法比较 1.对象初始化: BeautifySoup库: from bs4 import BeautifulSoup html = 'html strin ...

  3. 第四节:Web爬虫之pyquery解析库

    PyQuery库也是一个非常强大又灵活的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝佳的选择,PyQuery 是 Python 仿照 jQuery 的严 ...

  4. Pyquery解析库的安装和使用

    Pyquery同样是一个强大的网页解析工具,它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便.GitHub:https://github.com/gawel/pyqu ...

  5. pyquery解析库的介绍和使用

    ### pyquery的介绍和使用 ## 测试文本 text = ''' <html><head><title>there is money</title&g ...

  6. xpath beautiful pyquery三种解析库

    这两天看了一下python常用的三种解析库,写篇随笔,整理一下思路.太菜了,若有错误的地方,欢迎大家随时指正.......(conme on.......) 爬取网页数据一般会经过 获取信息-> ...

  7. Python爬虫3大解析库使用导航

    1. Xpath解析库 2. BeautifulSoup解析库 3. PyQuery解析库

  8. pyquery 的用法 --爬虫解析库

    如果你对Web有所涉及,如果你比较喜欢用CSS选择器,如果你对jQuery有所了解,那么这里有一个更适合你的解析库--pyquery. 接下来,我们就来感受一下pyquery的强大之处. 1. 准备工 ...

  9. Python爬虫【解析库之pyquery】

    该库跟jQuery的使用方法基本一样  http://pyquery.readthedocs.io/ 官方文档 解析库的安装 pip3 install pyquery 初始化 1.字符串初始化 htm ...

随机推荐

  1. Linux:搭建samba服务器

    samba服务器的搭建 修改防火墙设置 firewall-cmd --permanent --add-service=samba //设置防火墙 firewall-cmd --reload //重新加 ...

  2. Re-DD-Hello

    题目地址 https://dn.jarvisoj.com/challengefiles/1.Hello.12b9bde7c0c8558a9da42aa1798cafc8 用IDA打开,找到算法函数 写 ...

  3. 算法问题实战策略 BOARDCOVER

    地址 https://algospot.com/judge/problem/read/BOARDCOVER 解法 DFS 最近似乎在简单DFS上花费太多时间了 首先扫描地图 统计可覆盖的元素个数 如果 ...

  4. AD软件笔记

    问题1:不同网络的线可以重叠在一起         解决方法1: 在AD中,可以通过   SHIFT+R  快捷键     设置 三种布线模式(忽略 避开 或者 推挤) 解决方法2: 设置规则的Ele ...

  5. openjdk源码下载

    http://hg.openjdk.java.net/jdk8u/jdk8u60/jdk/file/935758609767 browse>zip

  6. commons-httpclient 和 httpclient 区别

    今天在看项目的pom的时候,发现里面有这么两个包依赖. <dependency> <groupId>commons-httpclient</groupId> < ...

  7. 如何在python中使用Elasticsearch

    什么是 Elasticsearch ​ 想查数据就免不了搜索,搜索就离不开搜索引擎,百度.谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索引了互联网上开放的所有网页和数据.然而对于我们自己的业务数据来说 ...

  8. Java并发编程:Java中的锁和线程同步机制

    锁的基础知识 锁的类型 锁从宏观上分类,只分为两种:悲观锁与乐观锁. 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新 ...

  9. 解决SQL Server中无管理员账户权限问题

    遇到忘记SQL Server管理员账户密码或管理员账户被意外删除的情况,如何在SQL Server中添加一个新的管理员账户?按一下步骤操作可添加一个windows账户到SQL Server中,并分配数 ...

  10. hyper-v简介及安装使用

     前言:作为IT界的巨头,微软自己的虚拟化技术,也是微软第一个采用Vmware与CitrixXen一样基于hypervisor的虚拟化技术,有着自己可圈可点的地方,微软自己的虚拟化技术嘛,对windo ...