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

相关推荐
spencer_tseng3 小时前
[j2cache ehcache.xml]/tmp/.ehcache-diskstore.lock (Permission denied)
xml·linux·python·ehcache·[j2cache
梦想不只是梦与想4 小时前
Python Web 框架:FastAPI
python·fastapi·web框架
玩大数据的龙威4 小时前
农经权二轮延包—全面取代人工公示图生成
python·arcgis
IT_Octopus4 小时前
JSON 日志里的 `{“$ref“:“$.xxx“}`:从 fastjson 兼容包到原生 fastjson2 的迁移实录
开发语言·python·json
geovindu4 小时前
python:HandWriting Recognition using paddlepaddle
开发语言·后端·python·paddlepaddle
wuyk5555 小时前
Python 零基础入门第九章:用户输入与 While 循环
开发语言·python
兮动人5 小时前
Python变量与常量
开发语言·python·机器学习·python变量与常量
2601_962300815 小时前
机器学习的理想基石
人工智能·python·机器学习·编程语言·数据处理
Java后端的Ai之路5 小时前
21、Python - 命令模式
开发语言·人工智能·python·命令模式·外观模式
2601_962077985 小时前
机器学习及其Python实践
pytorch·python·机器学习·tensorflow·scikit-learn