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开始)

相关推荐
知行合一。。。24 分钟前
Python--04--数据容器(总结)
开发语言·python
架构师老Y28 分钟前
008、容器化部署:Docker与Python应用打包
python·容器·架构
lifewange1 小时前
pytest-类中测试方法、多文件批量执行
开发语言·python·pytest
pluvium271 小时前
记对 xonsh shell 的使用, 脚本编写, 迁移及调优
linux·python·shell·xonsh
2401_827499991 小时前
python项目实战09-AI智能伴侣(ai_partner_5-6)
开发语言·python
PD我是你的真爱粉1 小时前
MCP 协议详解:从架构、工作流到 Python 技术栈落地
开发语言·python·架构
ZhengEnCi2 小时前
P2G-Python字符串方法完全指南-split、join、strip、replace的Python编程利器
python
是小蟹呀^2 小时前
【总结】LangChain中工具的使用
python·langchain·agent·tool
宝贝儿好2 小时前
【LLM】第二章:文本表示:词袋模型、小案例:基于文本的推荐系统(酒店推荐)
人工智能·python·深度学习·神经网络·自然语言处理·机器人·语音识别
王夏奇2 小时前
pythonUI界面弹窗设置的几种办法
python·ui