30. PyQuery: 基于HTML的CSS选择器

2023-11-08

目录

前言 

导包

基本用法

按标签选择

标签链式操作

简便链式:后代选择器

类选择器 

id 选择器 

属性/文本选择器(重点)

改进多标签拿属性方法

快速总结

PyQuery的强大功能:修改源代码

添加代码块

修改/添加属性

删除属性/标签等

总结


前言 

我们在前面的章节认识了CSS与CSS选择器的概念, 本节我们介绍一个Python模块: PyQuery. 

可能有些小伙伴认识Java中的JQuery, 其实PyQuery和它是异曲同工的. 


导包

from pyquery import PyQuery


基本用法

常用的就下列几种:

 下面通过实例讲解:

html = """
    <ul>
       <li class="aaa"><a href="http://www.google.com">谷歌</a></li>
       <li class="aaa"><a href="http://www.baidu.com">百度</a></li>
       <li class="bbb" id="qq"><a href="http://www.qq.com">腾讯</a></li>
       <li class="bbb"><a href="http://www.csdn.net">CSDN</a></li>
   </ul>
"""

# 加载html内容
p = PyQuery(html)

print(p)
print(type(p))

导入一段简单的html,用PyQuery接口加载html内容,打印看输出结果,发现就是html本身的内容。那么再打印一次它的类型,看看是不是什么都没有做,发现它是PyQuery类

PyQuery对象有什么用呢?

它可以把html加载起来,随后就可以在其后进行CSS选择器的操作了。

关于CSS选择器的知识点我们在上一节已经讲过,不懂的同学可以移步上一行的超链接传送门。

按标签选择

# pyquery对象直接(css选择器)

a = p("a")
print(a)
print(type(a))  # 依然是pyquery对象

可以筛选出所有a标签对象,而筛选结果依然是PyQuery对象,由此我们可以得出下例。

标签链式操作

# 链式操作
a = p("li")("a")
print(a)

 

由于筛选后还是PyQuery对象,所以我们可以继续筛选。上述例子就是先筛选出 li 标签,再在其中筛选 a 标签并打印输出。

简便链式:后代选择器

a = p("li a")
print(a)

这样的输出结果和上面是一样的。用了CSS选择器的语法:后代选择器,筛选包含在 li 标签的所有 a 标签。

类选择器 

a = p(".aaa a")  # class="aaa"
print(a)

查询结果为class为aaa的标签下包含的所有 a 标签。

id 选择器 

a = p("#qq a")  # id="qq"
print(a)

查询结果为 id 为 qq 的标签下包含的所有 a 标签。

属性/文本选择器(重点)

href = p("#qq a").attr('href')  # 拿属性
text = p("#qq a").text()  # 拿文本
print(href)
print(text)

查询结果为 id 为 qq 的标签下包含的 a 标签的 href 属性和它所包含的文本内容。

注意:如果多个标签同时拿属性,只能拿到第一个:

# 坑, 如果多个标签同时拿属性. 只能默认拿到第一个
href = p("li a").attr("href")
print(href)

多个标签同时拿属性,找到一个就返回了,不能这样写。

改进多标签拿属性方法

# 多个标签拿属性
it = p("li a").items()
for item in it:  # 从迭代器中拿到每一个标签
    href = item.attr("href")  # 拿到href属性\
    text = item.text()
    print(text, href)

用items()方法将标签化为列表,然后用循环的方法遍历列表,抓到每一个里面的href属性打印输出即可。

快速总结

1. pyquery(选择器)
2. items()  当选择器选择的内容很多的时候. 需要一个一个处理的时候
3. attr(属性名)  获取属性信息
4. text() 获取文本


PyQuery的强大功能:修改源代码

PyQuery和其他查询最大的区别就在于它可以修改网页源代码让他变得“整齐”,也就便于我们抓取信息等操作。

如下例所示:

添加代码块

html = """
<HTML>
    <div class="aaa">哒哒哒</div>
    <div class="bbb">嘟嘟嘟</div>
</HTML>
"""

p = PyQuery(html)

# 在xxxx标签后面添加xxxxx新标签
p("div.aaa").after("""<div class="ccc">吼吼吼</div>""")
p("div.aaa").append("""<span>我爱你</span>""")
print(p)

上述代码第11行的含义是在aaa类的div标签后面添加一行after里包含的代码块;

上述代码第12行的含义是在aaa类的div标签内部添加一行append里包含的代码块。

修改/添加属性

p("div.bbb").attr("class", "ccc")  # 修改属性
p("div.ccc").attr("id", "12306")  # 新增属性, 前提是该标签没有这个属性
print(p)

修改/添加属性用的都是 .attr() 这个方法 ,如果有这个属性,那么对应的就是修改,没有就是新增。

其实可以类比Python的字典键值对,很好理解。

删除属性/标签等

p("div.ccc").remove_attr("id")  # 删除属性
p("div.aaa").remove()  # 删除标签
print(p)

上述代码移除了class为ccc的div的id属性,和class为aaa的div标签本身。 

 

可以用上述方法分别移除筛选出的标签本身、标签属性、标签类、标签名字域(不常用)。


总结

本节我们讨论了PyQuery的基本用法和他的特殊之处,下一节将进行实战练习,用实例展示何时用PyQuery最合适。(也就是我们提到的让源代码变得“整齐”而使信息容易提取)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

30. PyQuery: 基于HTML的CSS选择器 的相关文章

  • chrome 中选择选项元素的额外填充

    我有一个选择元素 用户可以在其中选择分类和描述 仅在 Chrome 浏览器中 我有一个额外的填充 无法使用 padding 0 或其他 css 标签删除它 Chrome 的屏幕 https i stack imgur com m3iIb p
  • 电子邮件链接在 Android 上不起作用

    我有 HTML 格式的点击电子邮件链接的代码 它在我的电脑上运行良好 但在移动设备上不起作用 我只有 Android 所以我不知道问题是否仅在 Android 上或所有移动设备上 当我按下链接时 浏览器显示 网页无法显示 邮寄至 电子邮件受
  • 将图像编码为base64有什么效果?

    如果我将图像 jpg 或 png 转换为 base64 那么它会更大 还是具有相同的大小 会大多少呢 是否建议在我的网站上使用 Base64 编码的图像 大约会大 37 非常粗略地说 Base64 编码的二进制数据的最终大小等于原始数据大小
  • 使用base64编码图像的优点和缺点[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在考虑为我正在开发的网站使用 Base64 编码图像来优化加载时间 不管怎样 在开始之前 我想知道 这样做的优点和缺点是什么 目前 我没有看
  • 重新加载更新的 javascript> 代码而不完全重新加载 html 页面

    我正在开发一个单页 Web 应用程序 它具有许多不同的功能和形式 当开发一个深度 我的意思是主页上没有的 功能时 我会经历这个循环 开发代码 编辑类和函数 刷新整个页面 一路点击 直到到达我需要测试的部分 有时加起来大约一分钟 测试新代码
  • 从字体到跨度(大小和颜色)和背面的正则表达式(VB.NET)

    我正在寻找一个正则表达式 可以将我的字体标签 仅具有大小和颜色属性 转换为具有相关内联CSS的span标签 如果有帮助的话 这将在 VB NET 中完成 我还需要一个正则表达式来实现相反的效果 下面详细说明的是我正在寻找的转换示例 font
  • Beautifulsoup findAll 是如何工作的

    我注意到一些奇怪的行为findAll的方法 gt gt gt htmls p class slytherin p p class gryffindor p gt gt gt soup BeautifulSoup htmls html par
  • LESS CSS 语法对现代化很有用

    通常我使用现代化 http modernizr com 了解浏览器的功能 同时 我用LESS CSS http lesscss org 使我的CSS更具可读性和可维护性 使用 LESS 嵌套规则的常见样式如下所示 header color
  • 编辑类名中带有空格的元素的 css 样式

    我正在创建一个 tumblr 我必须编写一个外部 CSS 文件 但我在编辑 post 元素的 css 样式时遇到问题 这是它的结构 li class post quote other code li 问题是类名中有空格 我如何创建一个 CS
  • Gmail 无法在电子邮件上正确呈现字体

    我已经建立了一个 html 电子邮件并使用了 Google 字体 我已使用以下方法将字体包含在 head 标签中 if mso endif 并使用字体 即我这样做了
  • 如何将 div 与其父级的顶部对齐,但保持其内联块行为?

    See http jsfiddle net b2BpB 1 http jsfiddle net b2BpB 1 问 如何让box1和box3对齐到父div的顶部boxContainer boxContainerContainer backg
  • 如何在bootstrap中默认隐藏侧边栏?

    我在这里有一个很好的参考 作为 Bootstrap 在设计 Web 表单应用程序时的侧边栏 http startbootstrap com template overviews simple sidebar http startbootst
  • HTML5 支持命名空间吗?

    我们是否可以使用新标签来扩展 HTML5 例如
  • R Shinydashboard 自定义 CSS 到 valueBox

    我一直在尝试将 valueBox 的颜色更改为自定义颜色 超出 validColors 中可用的颜色 但一直无法这样做 我知道有一种方法可以使用标签来包含自定义 CSS 但是我无法将它们放在正确的位置 ui lt dashboardPage
  • 用于渲染 html 子集的 Django templatetag

    我有一些 html 在本例中是通过 TinyMCE 创建的 我想将其添加到页面中 但是 出于安全原因 我不想只打印用户输入的所有内容 有谁知道模板标签 最好是过滤器 只允许呈现 html 的安全子集 我意识到 Markdown 和其他人就是
  • 宽度:适合内容;在 Chrome 上工作,但在资源管理器上不工作

    我构建了一个应用程序 所有内容都在 Chrome 中完美显示 但如果我在 Windows 资源管理器中打开该应用程序 容器会比应有的小 我在用着width fit content 这是只适用于 Chrome 的东西吗 我怎样才能使其适用于所
  • Outlook 2013 渲染问题:嵌套表格截断相邻文本

    在开发 html 电子邮件通讯时 我经常使用类似于以下的结构 table width 244 border 0 cellpadding 0 cellspacing 0 tr td table border 0 align left tbod
  • 没有类的 CSS 选择器

    我正在使用选择器来选择不具有一个类的所有元素 list th not foo some rules 我怎样才能将其应用到多个班级 list th not foo list th not bar some rules 上面的 CSS 当然不会
  • 不使用控件时,视频元素在 Chrome 中消失

    So I think这是一个浏览器错误 它出现在一个更复杂的设计 网站中 但我已经进行了很好的尝试 简化了我的代码和设计等 并发现了以下内容 嵌入时
  • 在 Bootstrap 中使用 CakePHP 时如何修改包装器 div 错误类

    我在用着Bootstrap 3 0RC1 with CakePHP 2 3 6 尝试利用那些漂亮的课程 例如has error and has warning for 验证状态 http getbootstrap com css forms

随机推荐

  • 【Android取证篇】华为手机助手支持备份的数据类型-支持第三方应用

    Android取证篇 华为手机助手支持备份的数据类型 支持第三方应用 数据备份至电脑端 使用数据线或WLAN连接 取证注意断网操作 suy 文章目录 Android取证篇 华为手机助手支持备份的数据类型 支持第三方应用 一 支持备份的数据
  • 这个小程序厉害了!一键生成花式昵称,让你的微信从此与众不同!

    微信作为互联网时代的主要通讯工具 已经有10亿人在使用了 看朋友圈好友的微信昵称也是千奇百怪 如何才能制作专属于自己的昵称呢 今天小编给大家分享一款有意思的微信小程序 能够帮助我们制作出不一样的微信昵称 一起来看看吧 第一步 在微信中搜索
  • Makefile篇卷首语

    2023年5月24日 周三下午 今天我决定开始学习Makefile 一是因为很多开源软件都有Makefile 不会Makefile真的不行 我不知道怎么用Makefile来生成软件 也无法通过Makefile来查看我缺了什么依赖 因为我看不
  • Linux工具——gcc

    目录 一 gcc简介 二 C语言源文件的编译过程 1 预处理 2 编译 3 汇编 4 链接 5 动静态库 一 gcc简介 相信有不少的小白和我一样在学习Linux之前只听说过visual studio 其实这个gcc这个编译器实现的功能便是
  • 进制转换(C++实现)

    写在前面 小学期作业中碰到一题进制转换 自己写的过程很是坎坷 想到没有系统学习过进制转换的知识 于是搜索资料进行一个查漏补缺 本文仅作为学习记录 参考资料 C 手把手编程实现进制转换 哔哩哔哩 bilibili 模版学习自咸鱼君 http
  • TDBC回顾

    2023年7月5日上午 由中国通信标准化协会和中国信息通信研究院主办 大数据技术标准推进委员会承办 InfoQ联合主办的 2023可信数据库发展大会 电信行业数据库应用创新分论坛在北京国际会议中心隆重召开 会上 湖南亚信安慧科技有限公司副总
  • LoadRunner时提示“安装程序已确定挂起重新启动”解决方案

    在安装QTP或LoadRunner时 可能会遇到 安装程序已确定挂起重新启动 是否要立即退出安装以重新启动系统 的提示 但是重启电脑后再次启动安装程序 仍然有此错误提示 以下是我安装QTP时遇到的一个提示 如下图所示 这里给出问题产生原因以
  • 第一次AIGC主题线上交流

    2023年6月4日6点至8点 由 见睿思齐 发起和组织的第一次AIGC主题交流 愉快结束 在此非常感谢大家参与 同时也希望每位参与讨论的朋友 都有所收获 并且目标感满满地期待下一次交流 话说前段时间 见睿思齐 抛出了一个招募 AICG内容联
  • Java多维数组

    Java 中没有多维数组的概念 从数组底层的运行机制上来看 Java 没有多维数组 但是 Java 提供了支持多维数组的语法 可以实现多维数组的功能 Java 语言里的数组类型是引用类型 因此数组变量其实是一个引用 这个引用指向真实的数组内
  • 自动化测试:获取用户登录token信息,实现绕过登录跳转页面

    1 之前在网上看到 一些配置cookie来实现绕过登录的文章 但是 对于现在的网站 有些采用Local Storage来缓存当前加密的登录信息 这样的话 是无法通过cookie来操作的 所以我们需要得到缓存的已登录信息来实现绕过登录跳转到需
  • 安装Windows子系统(WSL2)-Ubuntu

    参考资料 https docs microsoft com zh cn windows wsl install manual https blog csdn net qq 28412779 article details 113565257
  • type-aliases-package不生效问题记录

    项目场景 在练习springboot集成mybatis时发现了这个问题 问题描述 这是我的yml文件中的type aliases package配置 但在mapper xml文件中还是不会生效 原因分析 配置地址书写错误 插件和idea冲突
  • HTML静态网页设计作业_胡歌明星主题7个页面_附源码(HTML+CSS+JavaScript)

    一 网页介绍 1 作品介绍 本作品的主题是明星blog 当前素材是胡歌 整体界面干净简约 符合当下的审美 大家可以根据自己的需求进行素材调整替换 该实例包含的HTML CSS和js 非常适合初学HTML的同学来学习 2 网页编辑 网页代码非
  • 哈尔滨工业大学21年计算机考研情况 学硕复录比超2:1?复试竞争激烈!

    https mp weixin qq com s U0LpgUuUHnYyt7bf 6eCCg
  • 支付系统就该这么设计(万能通用),稳的一批!

    作者 PetterLiu 来源 www cnblogs com wintersun 支付永远是一个公司的核心领域 因为这是一个有交易属性公司的命脉 那么 支付系统到底长什么样 又是怎么运行交互的呢 抛开带有支付牌照的金融公司的支付架构 下述
  • Can't connect to activity manager; is the system running 问题探究及解决

    一 文档概述 本文旨在记录错误信息Error type 2 android util AndroidException Can t connect to activity manager is the system running 问题分析
  • 学习ORACLE-物化视图(MATERIALIZED VIEW)总结

    数据仓库项目中使用物化视图推送数据 现记录一下相关方面的知识 物化视图需要有基表 基表可以在本地库 也可以在远程库 可以在本地通过数据库链接访问远程库的基表 基表 hr departments orcl 物化视图 scott departm
  • google可视化编程工具blockly介绍

    1 什么是blockly blockly是google发布的可视化编程工具 是一个可用于Web Android iOS的可视化代码编辑器库 blockly有几个特点 它是纯粹的javascript库 它是100 面对客户端的 没有任何服务端
  • Cesium中文教程-空间数据可视化Visualizing Spatial Data(一)

    目录 3 空间数据可视化 Visualizing Spatial Data 1 实体API What is the Entity API 2 第一个实体 Our First Entity 3 图形和容器 Shapes and Volumes
  • 30. PyQuery: 基于HTML的CSS选择器

    目录 前言 导包 基本用法 按标签选择 标签链式操作 简便链式 后代选择器 类选择器 id 选择器 属性 文本选择器 重点 改进多标签拿属性方法 快速总结 PyQuery的强大功能 修改源代码 添加代码块 修改 添加属性 删除属性 标签等