10.5 PyQuery:jQuery 风格的 Python HTML 解析库


文章目录

  • 前言
  • 一、准备工作
    • [1.1 安装](#1.1 安装)
    • [1.2 初始化方式](#1.2 初始化方式)
  • [二、 快速上手](#二、 快速上手)
    • [2.1 基础操作](#2.1 基础操作)
    • [2.2 伪类选择器](#2.2 伪类选择器)
    • [2.3 常用选择器速查表](#2.3 常用选择器速查表)

前言

PyQuery 是一款基于 Python 的 HTML 解析库,其设计完全借鉴了 jQuery 的 API 风格。如果你熟悉 jQuery 的操作语法,又希望避免学习 BeautifulSoup 等其他解析库的全新方法体系,PyQuery 将是你的理想选择。


一、准备工作

1.1 安装

bash 复制代码
bash
pip install pyquery

导入模块(推荐使用别名 pq):

python 复制代码
python
from pyquery import PyQuery as pq

1.2 初始化方式

PyQuery 支持多种数据源初始化:

  1. 传入 HTML 字符串
python 复制代码
python
html = '''
<html>
    <head>
        <title>Hello PyQuery</title>
    </head>
    <body>
        <ul id="container">
            <li class="l1">l1</li>
            <li class="l2">l2</li>
            <li class="l3">l3</li>
        </ul>
    </body>
</html>
'''
doc = pq(html)
  1. 传入本地文件
python 复制代码
python
doc = pq(filename='p.html')
  1. 传入 lxml.etree 对象
python 复制代码
python
from lxml import etree

etree_obj = etree.fromstring('<html><title>Hello PyQuery</title></html>')
doc = pq(etree_obj)
  1. 传入 URL(自动请求)
python 复制代码
python
doc = pq('http://www.baidu.com')

二、 快速上手

2.1 基础操作

  1. 获取元素
python 复制代码
python
doc = pq(html)

# 通过ID选择器获取元素
ul = doc('#container')

# 通过层级选择器获取元素
li = doc('ul li')

print(ul)  # 输出ul元素
print(li)  # 输出所有li元素
  1. 遍历元素
python 复制代码
python
# 获取所有li元素的迭代器
lis = doc('li').items()

for li in lis:
    print(li)
  1. 获取指定位置元素
python 复制代码
python
lis = doc('li').items()
l2 = list(lis)[1]  # 获取第二个li元素(索引从0开始)
print(l2)
  1. 获取亲属元素
python 复制代码
python
ul = doc('#container')
l2 = doc('#container .l2')

# 获取父元素
ul_parent = ul.parent()

# 获取所有子元素
ul_child = ul.children()

# 获取兄弟元素(除自身外的同级元素)
l2_sib = l2.siblings()

print(ul_parent)
print(ul_child)
print(l2_sib)
  1. 获取属性与文本
python 复制代码
python
doc = pq('''
<html>
    <head>
        <title name='title'>Hello PyQuery</title>
    </head>
</html>
''')

title = doc('title')

# 获取属性
print(title.attr('name'))  # 输出:title

# 获取文本内容
print(title.text())  # 输出:Hello PyQuery
  1. 获取 HTML 内容
python 复制代码
python
ul = doc('ul')
print(ul.html())  # 输出ul内部的HTML

2.2 伪类选择器

伪类选择器允许根据元素特征进行更精细的筛选:

python 复制代码
python
doc = pq('''
<html>
    <head>
        <title>Hello PyQuery</title>
    </head>
    <body>
        <ul id="container">
            <li class="l1">l1</li>
            <li class="l2">l2</li>
            <li class="l3">l3last</li>
        </ul>
    </body>
</html>
''')

# :gt() - 获取索引大于指定值的元素
lis = doc('li:gt(-1)')  # 获取所有li(索引大于-1)

# :first-child - 获取第一个子元素
fli = doc('li:first-child')

# :last-child - 获取最后一个子元素
lli = doc('li:last-child')

# :nth-child() - 获取指定位置的子元素
l2 = doc('li:nth-child(2)')  # 第二个li

# :contains() - 获取包含指定文本的元素
cli = doc('li:contains("last")')  # 包含"last"文本的li

print(lis)
print(fli)
print(lli)
print(l2)
print(cli)

2.3 常用选择器速查表

选择器类型 示例 说明
基础选择器 doc('li') 标签选择器
doc('.l1') 类选择器
doc('#container') ID选择器
层级选择器 doc('ul li') 后代元素
doc('ul > li') 直接子元素
属性选择器 doc('[class]') 有class属性的元素
doc('[class="l1"]') class等于l1的元素
伪类选择器 doc('li:first') 第一个li
doc('li:last') 最后一个li
doc('li:even') 偶数索引的li
doc('li:odd') 奇数索引的li
doc('li:eq(1)') 第二个li(索引0开始)

相关推荐
0思必得02 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
韩立学长2 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
qq_192779872 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
u0109272713 小时前
使用Plotly创建交互式图表
jvm·数据库·python
爱学习的阿磊3 小时前
Python GUI开发:Tkinter入门教程
jvm·数据库·python
Imm7773 小时前
中国知名的车膜品牌推荐几家
人工智能·python
tudficdew3 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python
sjjhd6524 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
2301_821369614 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
机 _ 长4 小时前
YOLO26 改进 | 基于特征蒸馏 | 知识蒸馏 (Response & Feature-based Distillation)
python·深度学习·机器学习