解析库的使用

  • 使用 Xpath
  • 使用 pyquery
from pyquery import PyQuery as pq
doc = pq(html)
print(doc)

PyQuery对象可以接受的参数有

  • html格式的字符串
  • html文件
  • 指定参数 url = '...'

PyQuery对象用于后续的进行选择、筛选等操作

用于解析的html格式的字符串html

html = '''

second itemthird item

fifth item

'''
from pyquery import PyQuery as pq
doc = pq(html)
doc('#container .list li')
print(doc)
  • 用pq对象初始化后,通过在单引号中输入筛选条件来完成在pq文件中的筛选
  • 这种筛选用法为css选择器,选择条件间以空格分开
  • #name表示id为name, .name表示class为name, name表示选择name节点
  • 此时doc对象仍为pq类型
  • 选择器的并列于先后关系 ​ 以 doc('.list .item-0.active')为例
  • 先选择了 class = "list"的节点,之后再进行一次筛选,选择了 class = "item-0 active"的节点
  • 也即是说空格前后在筛选时有着先后的顺序关系,未以空格分割开的同类条件有着并列关系。

  • pq.find():在所有子孙节点中查找

  • pq.children():在所有子节点中查找
  • pq.parent():在该结点的父结点中查找
  • pq.parents():在该结点的祖先节点中查找

其中括号中传入的参数仍为CSS选择器的语法,即仍为: doc('#container .list li')

在查询结果不止一条时,需要通过遍历来完成更高的操作要求。

doc = pq(html)
lis = doc('li').items()
for aNode in lis:
    print(aNode)
  • 对查询结果调用了 items()方法,这时类型会由PyQuery转变为迭代对象generator,可以使用for语句来进行操作

​ 可以进行的操作包括

  • 获取节点的属性、文本
  • 删除、改变或添加节点的属性、文本
  • 移除某个节点

  • pq.attr('attrName')

doc = pq(html)
a = doc('.item-0.active a')
print(a.attr('href'))
print(a.attr.href) #另一种写法

该代码段选中的节点如下: <a href="link3.html"><span class="bold">third item</span></a> 最后输出结果为: link3.html,输出了对应的a节点中的超链接的内容。
– 特别注意:在PyQuery查询对象结果中有多个时,该方法只会输出第一个节点中的内容。若要实现多个节点的内容均输出,需要结合上一届的迭代来完成。

  • pq.text()
doc = pq(html)
a = doc('.item-0.active a')
print(a.text())

该代码段选中的节点如下: <a href="link3.html"><span class="bold">third item</span></a> 最后输出的结果为: third item,输出了节点的纯文字内容。
* pq.html() 若选择该方法,则返回的为该节点的全部html语句,即输出结果为: <a href="link3.html"><span class="bold">third item</span></a>,但此时的类型为字符串。
* 特别注意 若得到的查询结果为多个节点
– .text()方法不需要遍历就可以取得
– .html()方法需要遍历才可以取得

  • pq.attr('name','content): 若name为已经存在的属性名称,则进行修改操作;若name尚不存在,则表示添加新属性
  • pq.text('content'): 将该节点的纯文本内容改作 content
  • pq.html('content'):将该节点的html内容改为 content
  • pq.remove(): 需要先选中某个节点,执行后会将该节点删除。

Original: https://www.cnblogs.com/dysonxxxxx/p/16581937.html
Author: dysonkkk
Title: 解析库的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578856/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 秒搞VirtualBox 、CentOS 的安装过程

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 一、介绍背景: VirtualBox : 由德国 InnoTek 软件公司出品 Open Source Software, OS…

    Linux 2023年5月27日
    093
  • Fastadmin引入Layui模块

    Fastadmin,PHP,Fastadmin引入layui模块,Fastadmin使用layui。 ​ Fastadmin基于 RequireJS进行JS模块的管理,因此如果我们…

    Linux 2023年6月6日
    095
  • SpringBoot中通过AOP整合日志文件

    1.SpringBoot中通过AOP整合日志文件 1. 导入相关的依赖 org.springframework.boot spring-boot-starter org.sprin…

    Linux 2023年6月14日
    0101
  • Mybatis源码解读-SpringBoot中配置加载和Mapper的生成

    本文 mybatis-spring-boot探讨在springboot工程中mybatis相关对象的注册与加载。 建议先了解mybatis在spring中的使用和springboo…

    Linux 2023年6月7日
    0114
  • NO.6 HTML+CSS 笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0102
  • springboot工程引用本地lib文件夾内的jar包,打包時把依賴jar包打入jar包

    本地工程新建lib文件夾,并放入jar包 springboot工程引用lib文件夹下的jar包 pom中增加 com.aliyun.vcs.dataengine common sy…

    Linux 2023年6月8日
    0104
  • 国庆专属头像一键生成搭建教程,附源码!

    国庆节马上就要来啦! 没有一个像样的微信头像怎么行。 为此小编为大家带来了一款国庆节国旗头像生成源码,有服务器、域名的朋友可以自行下载上传至服务器之后提供给大家使用。 没有服务器、…

    Linux 2023年6月7日
    0120
  • gitlab备份迁移与升级

    bash;gutter:false; 升级计划: https://docs.gitlab.com/ee/update/index.html#upgrade-paths</p&…

    Linux 2023年6月7日
    073
  • 面试之Java String 编码相关

    另有一篇我的字符编码本质入门的文章见这里:https://www.cnblogs.com/uncleguo/p/16008551.html 实话说,作为一个多年Java老年程序员,…

    Linux 2023年6月13日
    0115
  • JuiceFS 缓存预热详解

    缓存预热是一个比较常见的概念,相信很多小伙伴都有所了解。对于 JuiceFS 来说,缓存预热就是将需要操作的数据预先从对象存储拉取到本地,从而获得与使用本地存储类似的性能表现。 缓…

    Linux 2023年6月14日
    088
  • 制作pip离线源

    一、下载指定的包到相应的文件夹 (1)、创建存放安装包的目录:(联网环境) bash;gutter:true; pip list #查看安装的包 mkdir packs pip i…

    Linux 2023年6月8日
    0118
  • redis持久化存储

    redis持久化存储 redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,r…

    Linux 2023年6月7日
    0108
  • JavaScript事件处理(三)

    上机三 JavaScript事件处理 目的: 熟练掌握JavaScript事件处理机制 重点理解面向对象编程思想,并构建程序。 要求: 定义一个按钮,动态生成DIV,可以生成多个D…

    Linux 2023年6月13日
    095
  • Podman基础用法

    Podman基础 1、什么是Podman? Podman是一种开源的Linux原生工具,旨在根据开放容器倡议(Open Container Initiative,OCI)标准开发、…

    Linux 2023年6月7日
    094
  • MongoDB建立主从复制小案例(一主一从)

    1. 开启两个mongo服务器(用于一主一从, 没有加安全验证相关参数 : 可以使用mongd-help查看) mongod –bind_ip IP –po…

    Linux 2023年6月6日
    0100
  • 关于网络安全防护架构中的DMZ区

    公司有一个网站群的业务,应用规模比较大,目前计划是从传统的虚拟机部署方式迁移到内部的私有云。 这种迁移的动作是一个很好的学习机会。在交流的时候的时候,领导有提到现有的架构基本上是参…

    Linux 2023年6月14日
    0103
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球