使用 Parsel 的 Python 网络解析入门

蟒蛇, Jan-03-20255 分钟阅读

对于 Python 开发人员、数据科学家和网络搜索爱好者来说,网络搜索已成为一项基本技能。无论您是提取数据进行分析,还是构建价格比较工具或自动提取内容,网络解析都是这些任务的核心。但是,是什么让网络解析既高效又适合初学者呢?Parsel 就是这样一个强大的 Python 库,它可以简化 HTML 解析和数据提取。

帕塞尔简介

什么是网络解析,为什么它很重要?

Parsel是一个轻量级 Python 库,设计用于 HTML/XML 解析和数据提取。Parsel 在构建时考虑到了网页刮擦,因此可以使用XPathCSS 等强大的选择器轻松与网页结构交互。通过这些工具,您可以从网页中精确定位和提取特定元素或属性。Parsel 与 Python 生态系统的集成也意味着它能与`requests``httpx` 等库无缝协作,获取网页内容。

Parsel 的主要功能

  • 支持选择器: 使用 XPath 获取详细的路径导航,或使用 CSS 选择器获取更简单的语法。
  • 灵活性:它支持多种 HTML/XML 解析任务,从简单的文本提取到处理深嵌套元素。
  • 可扩展性:Parsel 可以通过循环结构从单个页面或多个页面提取数据。
  • 与 Scrapy 集成:Parsel 的兼容性自然延伸到了 Scrapy,这是一种流行的网络搜刮框架。

常见用例

  • 网络抓取:从电子商务网站提取数据进行价格监测。
  • 数据挖掘: 从公共记录中收集联系信息或研究数据。
  • 自动化:简化下载产品规格等重复性工作。

了解选择器和 HTML 解析

什么是 HTML 解析?

HTML 解析是将 HTML 文档分解为标签、属性和文档对象模型 (DOM) 等结构组件的过程。Parsel 利用这种结构精确定位并提取所需的数据。

HTML 文档使用

  • 标签 定义元素类型(例如, <h1>, <p>, <img>).
  • 属性 提供有关元素的附加信息(如 本我, , href).
  • DOM: 网页的分层表示法,可实现元素之间的导航。

什么是选择器?

XPathCSS选择器是用于选择 HTML 文档中元素的查询语言:

  • XPathXPath 功能强大、特性丰富,可根据节点在 DOM 中的路径、父子关系和条件选择节点。
  • CSS 选择器: 前端开发中常用的一种更简单的语法,非常适合根据类、ID 或伪选择器来选择元素。

点击此处了解更多关于选择器的信息。

先决条件

在开始使用 Parsel 之前,请确保以下几点:

  • 已安装 Python:从
  • 安装所需库函数(parselrequests): 
pipinstallparsel requests

用于 HTML 解析的解析器技术

按 ID 和类别提取元素

通过 Parsel,我们只需知道元素的类名ID 就能解析该元素。这在针对网页中的特定元素进行数据提取时特别有用。

为了演示,我们将使用 示例网站.我们将重点从类名为 产品模块表示一个图书条目。

下面是一个 HTML 结构示例:

我们将从中提取

  • 书名
  • 书价
  • 可用性 状态

Python 代码示例

导入请求
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 内容。
  • 选择产品块: 它使用 CSS 选择器 article.product_pod 从页面中选择第一个图书条目。
  • 解析产品详细信息: 脚本提取 标题, 价格可用性 针对特定的 HTML 标记和属性,在 产品模块 块。
  • 显示结果:提取的数据将以可读格式打印到控制台。

输出示例

标题阁楼上的灯光
价格:51.77英镑
有货 库存

从元素中提取文本

无论是标题、描述还是网页上的其他可见内容,Parsel都能轻松地从 HTML 元素中提取文本。

为了演示,我们将使用相同的 示例网站 又来了。我们将重点使用 h3 标记嵌套在文章元素内,该元素的类为 产品模块.

下面是一个 HTML 结构示例:

我们将从中提取

  • 书名文字

Python 代码示例

导入请求
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> 标签
  • 显示结果: 提取的标题将打印到控制台。

输出示例

标题文字:阁楼上的灯光

提取属性(例如,"href"、"src"、"alt)

Parsel还允许我们从 HTML 元素中提取属性值,如 href、src 或 alt。这些属性通常包含有价值的数据,如 URL、图片来源或描述性文本。

我们将重点提取链接 (href)到图书的详细页面,从 <a> 标签内的 元素的 产品模块.

下面是一个 HTML 结构示例:

我们将从中提取

  • 链接 (href) 到图书的详细页面

Python 代码示例

导入请求
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)

脚本解释:

  • 获取网页:脚本发送 GET 请求,从网站上获取 HTML 内容。
  • 选择产品块:article.product_pod CSS 选择器的目标是第一个图书条目。
  • 提取 href 属性:使用 h3 a::attr(href),脚本会从嵌套在标签中的标签提取 href 值。
  • 显示结果:提取的 URL 会打印到控制台。

输出示例

图书链接: catalogue/a-light-in-the-attic_1000/index.html

提取元素列表

使用 CSS 或 XPath 选择器,Parsel可轻松从网页中提取多个元素。这在处理列表(如产品标题、链接或价格)时尤其有用。

我们将重点提取本教程使用的示例网站主页上显示的所有书名列表

下面是相关 HTML 结构的示例:

我们将从这些元素中提取

  • 主页上显示的所有书名

Python 代码示例

导入请求
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 内容。
  • 选择所有标题: 使用 CSS 选举人 article.product_pod h3 a::attr(title),它会选择所有 <a> 内部标签 <h3> 标记内 产品模块 元素。
  • 摘录标题: "(《世界人权宣言》) .getall() 方法检索所有匹配标题的列表。
  • 显示结果:逐一打印列表中的每个标题。

输出示例

标题阁楼上的灯光
标题:倾倒天鹅绒
标题:标题: 苏mission
标题:利器

导航嵌套元素

Parsel 可使用CSS选择器和XPath 高效地浏览复杂的嵌套 HTML 结构。这在提取深埋在多层 HTML 标记中的数据时尤为重要。

我们将在 产品模块 元素。

下面是相关 HTML 结构的示例:

我们将从这个嵌套结构中提取

  • 第一本书的价格

Python 代码示例

导入请求
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)

脚本解释:

  • 获取网页:脚本通过请求检索网页的 HTML 内容。
  • 选择第一个产品块: 它的目标是第一个文章标签,其类别为 产品模块.
  • 导航至嵌套价格元素: 使用 CSS 选举人 div.product_price p.price_color,它会导航到 div 中并选择 p 包含价格的标签。
  • 提取价格文本: "(《世界人权宣言》) .get() 方法获取价格值。
  • 显示结果: 打印提取的价格。

输出示例

价格51.77英镑

解析表格和列表

Parsel简化了从 HTML 列表和表格格式中提取结构化数据的过程。网站经常以重复模式显示信息,如产品网格或有序列表,这使得 Parsel 成为有效捕获这些数据的重要工具。

举例来说,我们将再次使用相同的 示例网站.我们的目标是提取一份书目及其价格的清单。具体来说,我们的目标是 <ol> 标记,其中包含多个 <li> 元素,每个元素代表一本图书。

下面是相关 HTML 结构的示例:

我们将从这个结构中提取

  • 每本书的书名
  • 每本书的价格

Python 代码示例

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}")

脚本解释:

  • 获取网页: 脚本发送GET请求,从网站上获取 HTML 内容。
  • 选择所有书目: 选择器 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
...

结论

在本教程中,我们探索了使用 ParselPython 中进行网页解析的基础知识。从了解基本选择器到导航嵌套元素、提取属性和解析列表,我们演示了 Parsel 如何简化从网页中提取有意义数据的过程。

下面是我们的简要回顾:

  • 通过 ID 和类提取元素: 使用 CSS 选择器锁定特定 HTML 元素。
  • 提取文本和属性 学习如何从元素中提取文本内容和属性(如 href 和 src)。
  • 处理嵌套元素: 探索如何浏览 HTML 结构中的父子关系。
  • 解析列表: 从表格或产品清单等重复模式中提取结构化数据。

下一步:

  • 使用 Parsel 尝试不同的网页和复杂的 HTML 结构。
  • 探索与Scrapy等其他库的集成,以开展大规模网络刮擦项目。
  • 遵循合乎道德的刮削最佳实践,如尊重robots.txt 文件和避免服务器超载。

Parsel 是网络扫描工具包中的一个强大工具,掌握它将为数据收集和分析带来无数机会。

祝您解析愉快