对于 Python 开发人员、数据科学家和网络搜索爱好者来说,网络搜索已成为一项基本技能。无论您是提取数据进行分析,还是构建价格比较工具或自动提取内容,网络解析都是这些任务的核心。但是,是什么让网络解析既高效又适合初学者呢?Parsel 就是这样一个强大的 Python 库,它可以简化 HTML 解析和数据提取。
Parsel是一个轻量级 Python 库,设计用于 HTML/XML 解析和数据提取。Parsel 在构建时考虑到了网页刮擦,因此可以使用XPath和CSS 等强大的选择器轻松与网页结构交互。通过这些工具,您可以从网页中精确定位和提取特定元素或属性。Parsel 与 Python 生态系统的集成也意味着它能与`requests` 和`httpx` 等库无缝协作,获取网页内容。
HTML 解析是将 HTML 文档分解为标签、属性和文档对象模型 (DOM) 等结构组件的过程。Parsel 利用这种结构精确定位并提取所需的数据。
HTML 文档使用
<h1>
, <p>
, <img>
).本我
, 类
, href
).XPath和CSS选择器是用于选择 HTML 文档中元素的查询语言:
点击此处了解更多关于选择器的信息。
在开始使用 Parsel 之前,请确保以下几点:
pipinstallparsel requests
通过 Parsel,我们只需知道元素的类名或ID 就能解析该元素。这在针对网页中的特定元素进行数据提取时特别有用。
为了演示,我们将使用 示例网站.我们将重点从类名为 产品模块
表示一个图书条目。
下面是一个 HTML 结构示例:
我们将从中提取
导入请求
从parsel 导入选择器
# 获取网页
url ="https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# 按类别选择第一个产品
product = selector.css("article.product_pod").get()
# 解析所选产品的详细信息
product_selector = Selector(text=product)
title = product_selector.css("h3 a::attr(title)").get()
price = product_selector.css("p.price_color::text").get()
availability = product_selector.css("p.instock.availability::text").get().strip()
print("Title:", title)
print("Price:", price)
print("Availability:", availability)
脚本解释:
获取
请求,以获取示例网站的 HTML 内容。article.product_pod
从页面中选择第一个图书条目。产品模块
块。标题阁楼上的灯光
价格:51.77英镑
有货 有库存
无论是标题、描述还是网页上的其他可见内容,Parsel都能轻松地从 HTML 元素中提取文本。
为了演示,我们将使用相同的 示例网站 又来了。我们将重点使用 h3
标记嵌套在文章元素内,该元素的类为 产品模块
.
下面是一个 HTML 结构示例:
我们将从中提取
导入请求
从parsel 导入选择器
# 获取网页
url ="https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# 按类别选择第一个产品
product = selector.css("article.product_pod").get()
# 解析所选产品的标题文本
product_selector = Selector(text=product)
title_text = product_selector.css("h3 a::attr(title)").get()
print("Title Text:", title_text)
获取
请求,从网站上获取 HTML 内容。产品模块
CSS 选择器的目标是第一个图书条目。h3 a::attr(title)
,脚本会从 <a>
标记嵌套在 <h3>
标签标题文字:阁楼上的灯光
Parsel还允许我们从 HTML 元素中提取属性值,如 href、src 或 alt。这些属性通常包含有价值的数据,如 URL、图片来源或描述性文本。
我们将重点提取链接 (href
)到图书的详细页面,从 <a>
标签内的 条
元素的 产品模块
.
下面是一个 HTML 结构示例:
我们将从中提取
href
) 到图书的详细页面导入请求
从parsel 导入选择器
# 获取网页
url ="https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# 按类别选择第一个产品
product = selector.css("article.product_pod").get()
# 解析所选产品的 "href "属性
product_selector = Selector(text=product)
book_link = product_selector.css("h3 a::attr(href)").get()
print("Book Link:", book_link)
脚本解释:
图书链接: catalogue/a-light-in-the-attic_1000/index.html
使用 CSS 或 XPath 选择器,Parsel可轻松从网页中提取多个元素。这在处理列表(如产品标题、链接或价格)时尤其有用。
我们将重点提取本教程使用的示例网站主页上显示的所有书名列表。
下面是相关 HTML 结构的示例:
我们将从这些元素中提取
导入请求
从parsel 导入选择器
# 获取网页
url ="https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# 选择所有书名
book_titles = selector.css("article.product_pod h3 a::attr(title)").getall()
# 打印每个标题
fortitleinbook_titles:
print("Title:", title)
脚本解释:
获取
请求,从网站上获取 HTML 内容。 article.product_pod h3 a::attr(title)
,它会选择所有 <a>
内部标签 <h3>
标记内 产品模块
元素。.getall()
方法检索所有匹配标题的列表。标题阁楼上的灯光
标题:倾倒天鹅绒
标题:标题: 苏mission
标题:利器
Parsel 可使用CSS选择器和XPath 高效地浏览复杂的嵌套 HTML 结构。这在提取深埋在多层 HTML 标记中的数据时尤为重要。
我们将在 产品模块
元素。
下面是相关 HTML 结构的示例:
我们将从这个嵌套结构中提取
导入请求
从parsel 导入选择器
# 获取网页
url ="https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# 按类别选择第一个产品
product = selector.css("article.product_pod").get()
# 解析嵌套的价格元素
product_selector = Selector(text=product)
price = product_selector.css("div.product_price p.price_color::text").get()
print("Price:", price)
脚本解释:
产品模块
.div.product_price p.price_color
,它会导航到 div 中并选择 p
包含价格的标签。.get()
方法获取价格值。价格:51.77英镑
Parsel简化了从 HTML 列表和表格格式中提取结构化数据的过程。网站经常以重复模式显示信息,如产品网格或有序列表,这使得 Parsel 成为有效捕获这些数据的重要工具。
举例来说,我们将再次使用相同的 示例网站.我们的目标是提取一份书目及其价格的清单。具体来说,我们的目标是 <ol>
标记,其中包含多个 <li>
元素,每个元素代表一本图书。
下面是相关 HTML 结构的示例:
我们将从这个结构中提取
import requests
from parsel import Selector
# Fetch the webpage
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# Select all book items in the list
books = selector.css("ol.row li.article")
# Loop through each book and extract title and price
for book in books:
title = book.css("h3 a::attr(title)").get()
price = book.css("p.price_color::text").get()
print(f"Title: {title} | Price: {price}")
ol.row
li.article
针对所有 <li> 元素在有序列表 (<ol>) 表示单个图书项目。h3 a::attr(title)
的 title 属性。 <a>
标记。--- p.price_color::text
中提取价格文本。 <p>
标签标题 A 光 在 阁楼 阁楼 | 价格 £51.77
标题: 小费 绒布 天鹅绒 | 价格 £53.74
标题 苏梅兹 | 价格: 50.10 英镑 £50.10
标题 利器 对象 | 价格 £47.82
...
在本教程中,我们探索了使用 Parsel 在Python 中进行网页解析的基础知识。从了解基本选择器到导航嵌套元素、提取属性和解析列表,我们演示了 Parsel 如何简化从网页中提取有意义数据的过程。
下面是我们的简要回顾:
Parsel 是网络扫描工具包中的一个强大工具,掌握它将为数据收集和分析带来无数机会。
祝您解析愉快