文章目录

  • PyQuery库
    • 一、 简介
      • 1、 概述
      • 2、 安装
      • 3、 导包
    • 二、 用法详解
      • 1、 初始化
        • 1.1 字符串初始化
        • 1.2 URL 初始化
        • 1.3 文件初始化
      • 2、 CSS选择器
        • 2.1 属性选择器
        • 2.2 节点选择器
        • 2.3 筛选选择器
      • 3、元素操作
        • 3.1 遍历元素
        • 3.2 获取属性值
      • 4、 样式操作
        • 4.1 修改样式
      • 5、 获取值
        • 5.1 获取属性值
        • 5.2 获取文本值
        • 5.3 获取 HTML 元素
    • 三、 总结

PyQuery库

一、 简介

1、 概述

pyquery库是jQuery的Python实现,能够以jQuery的语法来操作解析 HTML 文档,易用性和解析速度都很好

PyQuery是一个类似于jQuery的解析网页工具,使用lxml操作xml和html文档,它的语法和jQuery很像。和XPATH,Beautiful Soup比起来,PyQuery更加灵活,提供增加节点的class信息,移除某个节点,提取文本信息等功能

PyQuery是强大而又灵活的网页解析库,如果你觉得正则写起来太麻烦,如果你觉得BeautifulSoup语法太难记,如果你熟悉jQuery的语法,如果你觉得xpath用法单一。那么,PyQuery就是你绝佳的选择

2、 安装

pip install pyquery

3、 导包

from pyquery import PyQuery as pq

二、 用法详解

1、 初始化

初始化PyQuery对象

  • html文档的所有操作都需要PyQuery对象来完成,初始化PyQuery对象主要有三种方式,分别是通过网址、字符串和文件名创建

1.1 字符串初始化

html =
"""
<div><ul><li class="item" data-index="0"> first </li><li class="item" data-index="1"> second </li><li class="item" data-index="2"> third </li></ul>
</div>
"""
doc = pq(html)

1.2 URL 初始化

headers = {'User-Agent': "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 96.0.4664 .93 Safari / 537.36",
}
doc = pq(url="http://www.baidu.com", headers=headers)  # 其会自动请求这个链接

1.3 文件初始化

doc = pq(filename="./demo.html")

2、 CSS选择器

2.1 属性选择器

css 选择器在 W3C 里面有,下面列举部分常用的选择器

名称 用法 描述
ID 选择器 doc("#id") 获取指定 ID 的元素
全选选择器 doc("*") 匹配所有元素
类选择器 doc(".class") 获取同一类 class 的元素
标签选择器 doc(“div”) 获取同一标签所有元素
并集选择器 doc(“div, p, li”) 选取多个元素
交集选择器 doc(“li.current”) 交集选择器
子代选择器 doc(“ul>li”) 使用 > 号,获取亲儿子层级的元素
后代选择器 doc(“ul li”) 使用空格,代表后代选择器,包括孙子等

还有 [element=value] :得到特定属性值的元素

2.2 节点选择器

语法 用法 说明
parent() doc(“li”).parent() 查找父级
children(selector) doc(“ul”).children(“li”) 查找最近一级(亲儿子)子代选择器
find(selector) doc(“ol”).find(“li”) 相当于后代选择器
siblings(selector) doc(".first").siblings(“li”) 查找兄弟节点,不包括自己本身
next_all([expr]) doc(".first").next_all() 查找当前元素之后所有的同辈元素
prevt_all([expr]) doc(".last").prevt_all() 查找当前元素之前所有的同级元素
has_class(className) doc(“div”).has_class(“protected”) 检查当前元素是否有某个特定的类
eq(index) doc(“li”).eq(2) 获取到的 li 元素中,选择索引号为 2 的元素,索引号从 0 开始

注意:

  • next_all:其得到的值为 xpath_Element 对象,可以通过 xpath 解析出来

parents(“选择器”):选择符合条件的祖先元素

2.3 筛选选择器

语法 用法 描述
:first doc(“li:first”); 获取第一个 li 元素
:last doc(“li:last”); 获取最后一个 li 元素
:eq(index) doc(“li:eq(2)”); 获取到的 li 元素中,选择索引号为 2 的元素,索引号从 0 开始
:odd doc(“li:odd”); 获取到的 li 元素中,选择索引号为奇数的元素
:even doc(“li:even”); 获取到的 li 元素中,选择索引号为偶数的元素

3、元素操作

3.1 遍历元素

那要取多个li节点的属性值,要怎么做呢?这就要结合 items 方法来实现。items()方法是返回的节点的生成器generator object PyQuery.items

li = pq(html)('li')
print(li.items())  # items 获取
for item in li.items():print(item)

3.2 获取属性值

语法:

doc('div').attr("id")  # 如果有两个值,其为修改样式

4、 样式操作

4.1 修改样式

直接使用 css 方法修改元素的样式

doc("div").css(# 内部存放字典
)

作用等同于 classList,可以操作样式,注意操作类里面的参数不要加点

  1. 添加类

    doc("div").add_class("current");  # 注意不要添加 .
    
  2. 删除类

    doc("div").remove_class("current");  # 注意不要添加 .
    
  3. 切换类

    doc("div").toggle_class("current");  # 如果没有这个类就添加,有就删除这个类
    

5、 获取值

5.1 获取属性值

attr 方法获取

doc('div').attr("id")

5.2 获取文本值

text 方法获取

doc("div").text()

如果多个节点有值,获取所有节点的文本,中间使用空格分隔

5.3 获取 HTML 元素

html 方法获取

doc("div").html()

三、 总结

通过观察 PyQuery 库的部分语法,我们发现其使用方法与 jQuery 的语法高度相似

可以通过学习 jQuery 语法来加快理解 PyQuery

Python 中 PyQuery 库相关推荐

  1. python网络爬虫系列教程——python中pyquery库应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install pyquery" 离线安装 ...

  2. python pyquery倒数第二个节点之前的节点_Python中PyQuery库的使用总结

    pyquery库是jQuery的Python实现,可以用于解析HTML网页内容,我个人写过的一些抓取网页数据的脚本就是用它来解析html获取数据的.他的官方文档地址是:http://packages. ...

  3. python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...

  4. python opencv创建图像_使用Python中OpenCV库创建一幅图片的RGB通道图片

    我们知道,在使用PhotoShop进行图片的抠取.创建和存储选区.存储图像的色彩资料等复杂操作时,经常会用到一个功能,那就是"RGB"通道,它能从三原色角度对一幅图片进行精准处理. ...

  5. python中requests库的用途-数据爬虫(三):python中requests库使用方法详解

    有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错,如下 使用 Requests 模块,上传文件也是如此简单的,文件的类型会自动进行处理: 因为12306有一个错误证书,我们那它的网 ...

  6. python中requests库的用途-python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也 ...

  7. python cnn_使用python中pytorch库实现cnn对mnist的识别

    使用python中pytorch库实现cnn对mnist的识别 1 环境:Anaconda3 64bit https://www.anaconda.com/download/ 2 环境:pycharm ...

  8. python下载库报错_下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决...

    下载python中Crypto库报错:ModuleNotFoundError: No module named 'Crypto'的解决 前言 最近在网上找了很多下载Crypto的方法,感觉作用都不算很 ...

  9. python中time库是什么意思_python中time库的time.time()函数的作用是什么

    python中time库的time.time()函数的作用是什么? 作用:Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数). time()方法语法:time. ...

最新文章

  1. 有原型的对象和没有原型的对象
  2. Ubuntu连结远程github
  3. 如何通过 BAPI 更新 PO 采购订单中的 confirmation tab 中的 confirmation date.
  4. 990. Satisfiability of Equality Equations
  5. 组织商品详情页的数据模型
  6. yandexbot ip列表整理做俄罗斯市场的站长可以关注一下
  7. 已成功拿下字节、腾讯、脉脉offer,算法太TM重要了
  8. 开源的数据可视化JavaScript图表库:ECharts
  9. 如果一栋楼起火谁赔偿_电动车起火,楼上25人被困,万宁一居民楼发生惊险一幕...
  10. 你真的了解 MySQL 数据库的运行状况吗?
  11. 支付宝第三方登录接口调用
  12. 无法连接阿里云 Windows 实例远程桌面
  13. mybatis之choose标签
  14. 年薪五万程序员的生活及他的理财梦
  15. MATLAB绘画双纵坐标图改纵坐标颜色都为黑色
  16. php mysql开发实战 光盘_随书光盘-PHP开发实战1200例 | 软件库
  17. 微软2018年重组背后,扒一扒受影响的人与事
  18. 常见博客Blog托管提供商评测
  19. Linux 基于FTP协议文件传输系统
  20. 微服务高频热点面试题汇总

热门文章

  1. matlab给定输入信号,MATLAB信号频谱分析
  2. 惠普问题笔记本引发170名中国消费者联合投诉【转载】
  3. ArcGIS Server Felx API接入E都市三维地图
  4. 如何善于运用“饥饿营销”手段
  5. 使用Fireworks 8制作网页效果图
  6. 音视频编解码:MP4封装格式笔记
  7. ERP软件开源是中国软件行业未来之路
  8. [翻译] 在 Overleaf 中找不到 PDF 浏览器
  9. 串口服务器有没有协议转换,协议转换器与moxa串口服务器通讯配置.doc
  10. 瑞吉外卖项目笔记+踩坑1——基础功能