技术文章和资源

技术文章(时间排序)

热门类别

Python PHP MySQL JDBC Linux

使用 Python 中的正则表达式和 urllib 解析网站

pythonserver side programmingprogramming

网页抓取是一种从网站提取数据的强大技术,可以实现自动数据提取和分析。得益于其强大的模块生态系统,Python 提供了多种工具来简化网页抓取工作。urllib 和 re(正则表达式)库是两个常用于在线抓取的库。

名为 urllib 的 Python 模块允许获取网页内容、处理 URL 和发送 HTTP 请求。它提供了一种连接 Web 服务器、打开 URL 和从网页获取 HTML 的简单方法。另一方面,内置 Python 模块 re 支持正则表达式,即用于构建搜索模式的字符序列。

在本文中,我们将专注于使用 urllib 和 re 来解析网站并检索相关数据。我们将研究两种仅依赖于这些库的方法,并展示如何使用正则表达式从网页的 HTML 内容中获取指定的数据。

让我们看一下这两个例子 -

使用 Urlib 和 Regex 解析网站以获取网站标题

在此示例中,可以使用 urllib 获取网页的 HTML 内容,并定义一个通过正则表达式收集数据的模式。可以利用正则表达式匹配并提取 HTML 文本中所需的信息,为简单的网页抓取操作提供快速且适应性强的解决方案。

算法

使用 Python 中的正则表达式和 urlib 解析网站的算法如下 -

  • 步骤 1 - 导入所需的库 urlib 和 re。

  • 步骤 2 - 在 urllib.request() 的帮助下使用 urlopen() 打开 url,并检索 HTML 内容。

  • 步骤 3 - 为 <title> 定义正则表达式模式标签。

  • 步骤 4 - 搜索模式的所有出现位置

  • 步骤 5 - 运行循环并打印所有匹配的标题。

示例

# 导入所需的库
import urllib.request
import re

# 打开 URL 并检索 HTML 内容
link = "https://www.tutorialspoint.com/index.htm"
# 借助 urllib.request 的 urlopen() 获取 URL
retrieving = urllib.request.urlopen(link)
retrieved_content = retrieving.read().decode()

# 定义正则表达式模式
pattern = r"<title>(.*?)</title>"

# 搜索模式的所有出现位置
matches = re.findall(pattern, removed_content)

# 处理提取的数据
for match in matches:
   print("Title:", match)

输出

Title: Online Courses and eBooks Library

使用 Urlib 和 Regex 解析网站以获取网站的 URL

在此示例中,使用 urllib 获取网页的 HTML 内容,并使用 re 定义特定的正则表达式模式。该模式用于从 HTML 页面中取出特定数据项,如 URL 或其他结构化数据。为了根据需要提取信息,此方法允许定制和适应性。

算法

下面给出了使用 Python 中的 regex 和 urlib 解析网站的算法 -

  • 步骤 1 - 要使用 urlib 和 regex,请导入所需的库 urlib 和 re。

  • 步骤 2 - 借助 urllib.request(),使用 urlopen() 函数打开 URL,并检索 HTML 内容。

  • 步骤 3 - 借助 href 标记为 url 定义正则表达式模式。

  • 步骤 4 - 搜索模式的所有出现位置

  • 步骤 5 - 运行循环并打印所有匹配标题。

示例

import urllib.request
import re

# 打开 URL 并检索 HTML 内容
link = "https://www.tutorialspoint.com/index.htm"
# 借助 urllib.request 的 urlopen() 获取 URL
retrieving = urllib.request.urlopen(link)
retrieved_content = retrieving.read().decode()

# 定义所需的正则表达式模式
pattern = r"<a href="(.*?)">"

# 搜索模式的所有出现位置
matches = re.findall(pattern, removed_content)

# 处理提取的数据后显示
for match in matches:
   print("URL:", match)

输出

URL: All the url’s of the website

结论

在本文中,我们分析了两个仅使用 urllib 和重新打包的 Python 网站解析示例。第一个示例展示了如何使用正则表达式提取网页标题。第二个示例演示了如何使用特定的正则表达式模式从锚标记中提取 URL。这些方法为需要从 HTML 文本中提取模式的简单 Web 抓取应用程序提供了快速解决方案。但是,请务必记住,当模式匹配需要更复杂的方法时,正则表达式可能不适合管理复杂的 HTML 结构或情况。


相关文章