文章目录
- 1. 安装 pyquery
- 2. 基本用法
- 3. 选择元素
- 4. 遍历元素
- 5. 提取数据
- 6. 修改元素
- 7. 过滤元素
- 8. 链式调用
- 9. 结合 requests 使用
- 10. 示例:抓取并解析网页
- 11. 注意事项
pyquery 是一个类似于 jQuery 的 Python 库,用于解析 HTML 和 XML 文档。它提供了简洁的 API,可以方便地提取和操作网页中的数据。以下是 pyquery 的详细使用方法:
1. 安装 pyquery
首先,确保你已经安装了 pyquery。你可以通过以下命令安装:pip install pyquery
2. 基本用法
初始化:可以从字符串、文件或 URL 初始化 pyquery 对象:
from pyquery import PyQuery as pq# 从字符串初始化
html = """
<div id="container"><p class="item">Item 1</p><p class="item">Item 2</p><p class="item">Item 3</p>
</div>
"""
doc = pq(html)# 从文件初始化
doc = pq(filename='example.html')# 从 URL 初始化
doc = pq(url='https://example.com')
3. 选择元素
pyquery 支持类似 jQuery 的选择器语法。
通过标签名选择
# 选择所有 <p> 标签
p_tags = doc('p')
print(p_tags)
通过类名选择
# 选择所有 class 为 "item" 的元素
items = doc('.item')
print(items)
通过 ID 选择
# 选择 id 为 "container" 的元素
container = doc('#container')
print(container)
通过属性选择
# 选择所有具有 href 属性的 <a> 标签
links = doc('a[href]')
print(links)
4. 遍历元素
遍历子元素
# 遍历所有 class 为 "item" 的元素
for item in doc('.item').items():print(item.text())
获取父元素
# 获取第一个 class 为 "item" 的父元素
parent = doc('.item').parent()
print(parent)
获取兄弟元素
# 获取第一个 class 为 "item" 的兄弟元素
siblings = doc('.item').siblings()
print(siblings)
5. 提取数据
获取文本内容
# 获取第一个 class 为 "item" 的文本内容
text = doc('.item').eq(0).text()
print(text)
获取 HTML 内容
# 获取第一个 class 为 "item" 的 HTML 内容
html = doc('.item').eq(0).html()
print(html)
获取属性值
# 获取第一个 <a> 标签的 href 属性
href = doc('a').eq(0).attr('href')
print(href)
6. 修改元素
修改文本内容
# 修改第一个 class 为 "item" 的文本内容
doc('.item').eq(0).text('New Item')
print(doc)
修改 HTML 内容
# 修改第一个 class 为 "item" 的 HTML 内容
doc('.item').eq(0).html('<span>New Item</span>')
print(doc)
修改属性值
# 修改第一个 <a> 标签的 href 属性
doc('a').eq(0).attr('href', 'https://newexample.com')
print(doc)
7. 过滤元素
过滤符合条件的元素
# 过滤出 class 为 "item" 且包含 "2" 的元素
filtered_items = doc('.item').filter(lambda i: '2' in pq(this).text())
print(filtered_items)
排除不符合条件的元素
# 排除 class 为 "item" 且包含 "3" 的元素
filtered_items = doc('.item').not_(lambda i: '3' in pq(this).text())
print(filtered_items)
8. 链式调用
pyquery 支持链式调用,可以在一行代码中完成多个操作:
# 获取第一个 class 为 "item" 的父元素的 HTML 内容
result = doc('.item').eq(0).parent().html()
print(result)
9. 结合 requests 使用
pyquery 通常与 requests 库结合使用,用于抓取网页并解析:
import requests
from pyquery import PyQuery as pq# 抓取网页内容
response = requests.get('https://example.com')
html = response.text# 解析网页
doc = pq(html)# 提取数据
title = doc('title').text()
print(title)
10. 示例:抓取并解析网页
以下是一个完整的示例,展示如何使用 pyquery 抓取并解析网页数据:
import requests
from pyquery import PyQuery as pq# 抓取网页内容
url = 'https://example.com'
response = requests.get(url)
html = response.text# 解析网页
doc = pq(html)# 提取标题
title = doc('title').text()
print("网页标题:", title)# 提取所有链接
links = doc('a[href]')
for link in links.items():href = link.attr('href')text = link.text()print(f"链接文本: {text}, 链接地址: {href}")# 提取特定元素的内容
items = doc('.item')
for item in items.items():print("内容:", item.text())
11. 注意事项
编码问题:如果网页编码不是 UTF-8,可能需要手动指定编码。
动态内容:pyquery 只能解析静态 HTML,无法处理 JavaScript 动态加载的内容。如果需要处理动态内容,可以结合 Selenium 或 Pyppeteer 使用。
通过以上方法,你可以使用 pyquery 轻松解析和提取网页中的数据。它的语法简洁且功能强大,非常适合快速开发爬虫和数据采集工具。