Python 网页抓取 - 快速指南


Python 网页抓取 - 简介

网页抓取是从网页中提取信息的自动过程。本章将让您深入了解网络抓取、它与网络抓取的比较,以及为什么应该选择网络抓取。您还将了解网络抓取工具的组件和工作原理。

什么是网页抓取?

“刮擦”一词的字典含义意味着从网络上获取某些东西。这里出现了两个问题:我们可以从网络获取什么以及如何获取。

第一个问题的答案是“数据”。数据对于任何程序员来说都是不可或缺的,每个编程项目的基本要求就是大量的有用数据。

第二个问题的答案有点棘手,因为获取数据的方法有很多。一般来说,我们可以从数据库或数据文件等其他来源获取数据。但是,如果我们需要大量在线数据怎么办?获取此类数据的一种方法是手动搜索(在网络浏览器中单击)并保存(复制粘贴到电子表格或文件中)所需的数据。这种方法相当繁琐且耗时。获取此类数据的另一种方法是使用网络抓取

网络抓取,也称为网络数据挖掘网络收获,是构建一个能够自动从网络中提取、解析、下载和组织有用信息的代理的过程。换句话说,我们可以说,网络抓取软件不会根据我们的要求自动从多个网站加载和提取数据,而不是手动保存网站的数据。

网页抓取的起源

Web 抓取的起源是屏幕抓取,用于集成非基于 Web 的应用程序或本机 Windows 应用程序。最初,屏幕抓取是在万维网 (WWW) 广泛使用之前使用的,但它无法扩展 WWW 的扩展。这使得有必要实现屏幕抓取方法的自动化,并且称为“网页抓取”的技术应运而生。

网络爬行与网络抓取

术语网络爬行和抓取通常可以互换使用,因为它们的基本概念是提取数据。然而,它们彼此不同。我们可以从它们的定义中了解基本的区别。

网络爬行基本上用于使用机器人(又称爬虫)对页面上的信息进行索引。它也称为索引。另一方面,网络抓取是一种使用机器人(又称抓取工具)提取信息的自动化方法。也称为数据提取

为了理解这两个术语之间的区别,让我们看看下面给出的比较表 -

网络爬行 网页抓取
指下载并存储大量网站内容。 指使用特定于站点的结构从网站中提取单个数据元素。
大多是大规模完成的。 可以以任何规模实施。
产生通用信息。 产生具体信息。
被 Google、Bing、Yahoo 等主要搜索引擎使用。Googlebot是网络爬虫的一个示例。 使用网络抓取提取的信息可用于在其他网站中复制或可用于执行数据分析。例如,数据元素可以是名称、地址、价格等。

网页抓取的用途

使用网络抓取的用途和原因就像万维网的用途一样无穷无尽。网络抓取工具可以做任何事情,例如在线订购食物、为您扫描在线购物网站以及在有比赛门票时购买比赛门票等,就像人类可以做的那样。这里讨论了网络抓取的一些重要用途 -

  • 电子商务网站- 网络抓取工具可以从各个电子商务网站收集与特定产品的价格专门相关的数据以进行比较。

  • 内容聚合器- 网络抓取被新闻聚合器和工作聚合器等内容聚合器广泛使用,用于向用户提供更新的数据。

  • 营销和销售活动- 网络抓取工具可用于获取销售和营销活动的电子邮件、电话号码等数据。

  • 搜索引擎优化 (SEO) - 网络抓取被 SEMRush、Majestic 等 SEO 工具广泛使用,以告诉企业他们对重要的搜索关键字的排名如何。

  • 机器学习项目的数据- 机器学习项目的数据检索取决于网络抓取。

研究数据- 研究人员可以通过这种自动化过程节省时间来收集用于研究工作的有用数据。

网络爬虫的组件

网络抓取工具由以下组件组成 -

网络爬虫模块

网络爬虫模块是网络爬虫中非常必要的组件,用于通过向 URL 发出 HTTP 或 HTTPS 请求来导航目标网站。爬虫下载非结构化数据(HTML 内容)并将其传递给下一个模块提取器。

提取器

提取器处理获取的 HTML 内容并将数据提取为半结构化格式。这也称为解析器模块,并使用不同的解析技术(例如正则表达式、HTML 解析、DOM 解析或人工智能)来实现其功能。

数据转换和清洗模块

上面提取的数据不适合立即使用。它必须经过一些清洁模块,我们才能使用它。可以使用字符串操作或正则表达式等方法来实现此目的。请注意,提取和转换也可以在一个步骤中执行。

存储模块

提取数据后,我们需要按照我们的要求存储它。存储模块将以标准格式输出数据,该格式可以存储在数据库或JSON或CSV格式中。

网络爬虫的工作原理

网络抓取可以定义为用于下载多个网页内容并从中提取数据的软件或脚本。

网页抓取工具

我们可以通过简单的步骤来了解网络抓取工具的工作原理,如上图所示。

第1步:从网页下载内容

在此步骤中,网络抓取工具将从多个网页下载请求的内容。

第 2 步:提取数据

网站上的数据是 HTML,而且大多是非结构化的。因此,在这一步中,网络爬虫将从下载的内容中解析并提取结构化数据。

第 3 步:存储数据

在这里,网络抓取工具将以任何格式(如 CSV、JSON 或数据库)存储和保存提取的数据。

第四步:分析数据

成功完成所有这些步骤后,网络抓取工具将分析由此获得的数据。

Python 入门

在第一章中,我们了解了网络抓取的全部内容。在本章中,让我们看看如何使用Python实现网页抓取。

为什么使用 Python 进行网页抓取?

Python 是一种用于实现网页抓取的流行工具。Python 编程语言还用于与网络安全、渗透测试以及数字取证应用程序相关的其他有用项目。使用Python的基础编程,无需使用任何其他第三方工具即可执行网页抓取。

Python 编程语言越来越受欢迎,Python 非常适合网络抓取项目的原因如下:

语法简单

与其他编程语言相比,Python 具有最简单的结构。Python的这一特性使得测试变得更加容易,开发人员可以更加专注于编程。

内置模块

使用 Python 进行网页抓取的另一个原因是它拥有内置和外部有用的库。我们可以使用Python作为编程基础来执行许多与网页抓取相关的实现。

开源编程语言

Python 得到了社区的大力支持,因为它是一种开源编程语言。

应用范围广泛

Python 可用于各种编程任务,从小型 shell 脚本到企业 Web 应用程序。

Python的安装

Python 发行版可用于 Windows、MAC 和 Unix/Linux 等平台。我们只需下载适用于我们平台的二进制代码即可安装Python。但是,如果我们平台的二进制代码不可用,我们必须有一个 C 编译器,以便可以手动编译源代码。

我们可以在各种平台上安装 Python,如下所示 -

在 Unix 和 Linux 上安装 Python

您需要按照下面给出的步骤在 Unix/Linux 机器上安装 Python -

步骤 1 - 转到链接https://www.python.org/downloads/

步骤 2 - 在上面的链接上下载适用于 Unix/Linux 的压缩源代码。

步骤 3 - 将文件解压到您的计算机上。

步骤 4 - 使用以下命令完成安装 -

run ./configure script
make
make install

您可以在标准位置/usr/local/bin找到已安装的 Python ,其库位于/usr/local/lib/pythonXX,其中 XX 是 Python 的版本。

在 Windows 上安装 Python

您需要按照下面给出的步骤在 Windows 计算机上安装 Python -

步骤 1 - 转到链接https://www.python.org/downloads/

步骤 2 - 下载 Windows 安装程序python-XYZ.msi文件,其中 XYZ 是我们需要安装的版本。

步骤 3 - 现在,将安装程序文件保存到本地计算机并运行 MSI 文件。

步骤 4 - 最后,运行下载的文件以打开 Python 安装向导。

在 Macintosh 上安装 Python

我们必须使用Homebrew在 Mac OS X 上安装 Python 3。Homebrew 易于安装并且是一个很棒的软件包安装程序。

还可以使用以下命令安装 Homebrew -

$ ruby -e "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)"

为了更新包管理器,我们可以使用以下命令 -

$ brew update

借助以下命令,我们可以在 MAC 计算机上安装 Python3 -

$ brew install python3

设置路径

您可以使用以下说明在各种环境中设置路径 -

在 Unix/Linux 上设置路径

使用以下命令通过各种命令 shell 设置路径 -

对于 csh shell

setenv PATH "$PATH:/usr/local/bin/python".

对于 bash shell (Linux)

ATH="$PATH:/usr/local/bin/python".

对于 sh 或 ksh shell

PATH="$PATH:/usr/local/bin/python".

在 Windows 上设置路径

要在Windows上设置路径,我们可以在命令提示符下使用路径%path%;C:\Python ,然后按Enter键。

运行Python

我们可以使用以下三种方式中的任何一种来启动Python -

互动口译员

提供命令行解释器或 shell 的操作系统(例如 UNIX 和 DOS)可用于启动 Python。

我们可以在交互式解释器中开始编码,如下所示 -

步骤 1 -在命令行输入python 。

步骤 2 - 然后,我们可以立即在交互式解释器中开始编码。

$python # Unix/Linux
or
python% # Unix/Linux
or
C:> python # Windows/DOS

来自命令行的脚本

我们可以通过调用解释器在命令行执行 Python 脚本。可以理解如下 -

$python script.py # Unix/Linux
or
python% script.py # Unix/Linux
or
C: >python script.py # Windows/DOS

集成开发环境

如果系统有支持Python的GUI应用程序,我们还可以从GUI环境运行Python。下面给出了一些在各种平台上支持 Python 的 IDE:

IDE for UNIX - UNIX,对于Python,有IDLE IDE。

Windows IDE - Windows 有 PythonWin IDE,它也有 GUI。

Macintosh 的 IDE - Macintosh 有 IDLE IDE,可以从主网站下载 MacBinary 或 BinHex'd 文件。

用于网页抓取的 Python 模块

在本章中,让我们学习可用于网页抓取的各种 Python 模块。

使用 virtualenv 的 Python 开发环境

Virtualenv 是一个创建隔离的 Python 环境的工具。在 virtualenv 的帮助下,我们可以创建一个文件夹,其中包含使用 Python 项目所需的包所需的所有可执行文件。它还允许我们添加和修改Python模块,而无需访问全局安装。

您可以使用以下命令来安装virtualenv -

(base) D:\ProgramData>pip install virtualenv
Collecting virtualenv
   Downloading
https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c3
5d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl
(1.9MB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 1.9MB 86kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0

现在,我们需要借助以下命令创建一个代表项目的目录 -

(base) D:\ProgramData>mkdir webscrap

现在,借助以下命令进入该目录 -

(base) D:\ProgramData>cd webscrap

现在,我们需要初始化我们选择的虚拟环境文件夹,如下所示 -

(base) D:\ProgramData\webscrap>virtualenv websc
Using base prefix 'd:\\programdata'
New python executable in D:\ProgramData\webscrap\websc\Scripts\python.exe
Installing setuptools, pip, wheel...done.

现在,使用下面给出的命令激活虚拟环境。成功激活后,您将在左侧括号中看到它的名称。

(base) D:\ProgramData\webscrap>websc\scripts\activate

我们可以在此环境中安装任何模块,如下所示 -

(websc) (base) D:\ProgramData\webscrap>pip install requests
Collecting requests
   Downloading
https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69
c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl (9
1kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 92kB 148kB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
   Downloading
https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca
55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133
kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 369kB/s
Collecting certifi>=2017.4.17 (from requests)
   Downloading
https://files.pythonhosted.org/packages/df/f7/04fee6ac349e915b82171f8e23cee6364
4d83663b34c539f7a09aed18f9e/certifi-2018.8.24-py2.py3-none-any.whl
(147kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 153kB 527kB/s
Collecting urllib3<1.24,>=1.21.1 (from requests)
   Downloading
https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c5
3851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl (133k
B)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 517kB/s
Collecting idna<2.8,>=2.5 (from requests)
   Downloading
https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746
a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 61kB 339kB/s
Installing collected packages: chardet, certifi, urllib3, idna, requests
Successfully installed certifi-2018.8.24 chardet-3.0.4 idna-2.7 requests-2.19.1
urllib3-1.23

要停用虚拟环境,我们可以使用以下命令 -

(websc) (base) D:\ProgramData\webscrap>deactivate
(base) D:\ProgramData\webscrap>

您可以看到 (websc) 已被停用。

用于网页抓取的 Python 模块

网页抓取是构建一个能够自动从网络中提取、解析、下载和组织有用信息的代理的过程。换句话说,网络抓取软件不会根据我们的要求自动从多个网站加载和提取数据,而不是手动保存网站的数据。

在本节中,我们将讨论用于网页抓取的有用 Python 库。

要求

它是一个简单的 python 网页抓取库。它是一个用于访问网页的高效 HTTP 库。在Requests的帮助下,我们可以获得网页的原始 HTML,然后可以对其进行解析以检索数据。在使用requests之前,我们先了解一下它的安装。

安装请求

我们可以将其安装在我们的虚拟环境或全局安装中。在pip命令的帮助下,我们可以轻松安装它,如下所示 -

(base) D:\ProgramData> pip install requests
Collecting requests
Using cached
https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69
c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl
Requirement already satisfied: idna<2.8,>=2.5 in d:\programdata\lib\sitepackages
(from requests) (2.6)
Requirement already satisfied: urllib3<1.24,>=1.21.1 in
d:\programdata\lib\site-packages (from requests) (1.22)
Requirement already satisfied: certifi>=2017.4.17 in d:\programdata\lib\sitepackages
(from requests) (2018.1.18)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in
d:\programdata\lib\site-packages (from requests) (3.0.4)
Installing collected packages: requests
Successfully installed requests-2.19.1

例子

在此示例中,我们对网页发出 GET HTTP 请求。为此,我们需要首先导入请求库,如下所示 -

In [1]: import requests

在下面的代码行中,我们使用 requests 对 URL https://authoraditiagarwal.com/发出 GET 请求来发出 GET HTTP 请求。

In [2]: r = requests.get('https://authoraditiagarwal.com/')

现在我们可以使用.text属性检索内容,如下所示 -

In [5]: r.text[:200]

请注意,在以下输出中,我们获得了前 200 个字符。

Out[5]: '<!DOCTYPE html>\n<html lang="en-US"\n\titemscope
\n\titemtype="http://schema.org/WebSite" \n\tprefix="og: http://ogp.me/ns#"
>\n<head>\n\t<meta charset
="UTF-8" />\n\t<meta http-equiv="X-UA-Compatible" content="IE'

网址库3

它是另一个 Python 库,可用于从 URL 检索数据,类似于requests库。您可以在其技术文档中阅读更多相关内容: https://urllib3.readthedocs.io/en/latest/

安装Urllib3

使用pip命令,我们可以在虚拟环境或全局安装中安装urllib3 。

(base) D:\ProgramData>pip install urllib3
Collecting urllib3
Using cached
https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c5
3851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl
Installing collected packages: urllib3
Successfully installed urllib3-1.23

示例:使用 Urllib3 和 BeautifulSoup 进行抓取

在下面的示例中,我们使用Urllib3BeautifulSoup抓取网页。我们在请求库的地方使用Urllib3来从网页获取原始数据(HTML)。然后我们使用BeautifulSoup来解析 HTML 数据。

import urllib3
from bs4 import BeautifulSoup
http = urllib3.PoolManager()
r = http.request('GET', 'https://authoraditiagarwal.com')
soup = BeautifulSoup(r.data, 'lxml')
print (soup.title)
print (soup.title.text)

这是运行此代码时您将观察到的输出 -

<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal

Selenium

它是一个开源自动化测试套件,适用于跨不同浏览器和平台的 Web 应用程序。它不是一个单一的工具,而是一套软件。我们有 Python、Java、C#、Ruby 和 JavaScript 的 selenium 绑定。在这里,我们将使用 selenium 及其 Python 绑定来执行网页抓取。您可以通过链接Selenium了解有关 Java 中的 Selenium 的更多信息。

Selenium Python 绑定提供了一个方便的 API 来访问 Selenium WebDrivers,如 Firefox、IE、Chrome、Remote 等。当前支持的 Python 版本为 2.7、3.5 及更高版本。

安装Selenium

使用pip命令,我们可以在虚拟环境或全局安装中安装urllib3 。

pip install selenium

由于 selenium 需要驱动程序才能与所选浏览器交互,因此我们需要下载它。下表显示了不同的浏览器及其下载链接。

例子

此示例显示使用 selenium 进行网页抓取。它也可以用于测试,称为Selenium测试。

下载指定版本浏览器的特定驱动程序后,我们需要使用Python进行编程。

首先,需要从 selenium 导入webdriver,如下所示 -

from selenium import webdriver

现在,提供我们根据要求下载的网络驱动程序的路径 -

path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)

现在,提供我们想要在由 Python 脚本控制的 Web 浏览器中打开的 url。

browser.get('https://authoraditiagarwal.com/leadershipmanagement')

我们还可以通过提供 lxml 中提供的 xpath 来抓取特定元素。

browser.find_element_by_xpath('/html/body').click()

您可以检查由 Python 脚本控制的浏览器的输出。

刮痧

Scrapy是一个用Python编写的快速、开源的网络爬虫框架,用于借助基于XPath的选择器从网页中提取数据。Scrapy 于 2008 年 6 月 26 日在 BSD 下首次发布,里程碑 1.0 于 2015 年 6 月发布。它为我们提供了从网站提取、处理和构建数据所需的所有工具。

安装Scrapy

使用pip命令,我们可以在虚拟环境或全局安装中安装urllib3 。

pip install scrapy

更详细的Scrapy学习可以访问链接 Scrapy

网页抓取的合法性

使用Python,我们可以抓取任何网站或网页的特定元素,但你知道它是否合法吗?在抓取任何网站之前,我们必须了解网页抓取的合法性。本章将解释与网络抓取合法性相关的概念。

介绍

一般来说,如果您打算将抓取的数据用于个人用途,那么可能不会有任何问题。但是,如果您要重新发布该数据,那么在执行相同操作之前,您应该向所有者发出下载请求,或者对政策以及您要抓取的数据进行一些背景研究。

刮除前需要进行研究

如果您的目标是从某个网站抓取数据,我们需要了解其规模和结构。以下是我们在开始网络抓取之前需要分析的一些文件。

分析robots.txt

事实上,大多数出版商都在某种程度上允许程序员抓取他们的网站。从其他意义上说,发布商希望对网站的特定部分进行爬网。为了定义这一点,网站必须制定一些规则来说明哪些部分可以被抓取,哪些部分不能被抓取。此类规则在名为robots.txt的文件中定义。

robots.txt是人类可读的文件,用于识别允许爬虫抓取和不允许抓取的网站部分。robots.txt文件没有标准格式,网站发布者可以根据自己的需要进行修改。我们可以通过在该网站的 url 后面提供斜线和 robots.txt 来检查该网站的 robots.txt 文件。例如,如果我们想检查 Google.com,那么我们需要输入https://www.google.com/robots.txt,我们将得到如下内容 -

User-agent: *
Disallow: /search
Allow: /search/about
Allow: /search/static
Allow: /search/howsearchworks
Disallow: /sdch
Disallow: /groups
Disallow: /index.html?
Disallow: /?
Allow: /?hl=
Disallow: /?hl=*&
Allow: /?hl=*&gws_rd=ssl$
and so on……..

网站的 robots.txt 文件中定义的一些最常见的规则如下 -

   User-agent: BadCrawler
Disallow: /

上述规则意味着 robots.txt 文件要求带有BadCrawler用户代理的爬网程序不要爬行其网站。

User-agent: *
Crawl-delay: 5
Disallow: /trap

上述规则意味着 robots.txt 文件会在所有用户代理的下载请求之间延迟爬虫 5 秒,以避免服务器过载。/trap链接将尝试阻止访问不允许链接的恶意爬虫。网站发布者可以根据自己的要求定义更多规则。这里讨论其中一些 -

分析站点地图文件

如果您想抓取网站以获取更新信息,您应该怎么做?您将抓取每个网页以获取更新的信息,但这会增加该特定网站的服务器流量。这就是为什么网站提供站点地图文件来帮助爬虫找到更新内容,而无需爬行每个网页。站点地图标准在http://www.sitemaps.org/protocol.html中定义。

站点地图文件的内容

以下是在 robots.txt 文件中发现的https://www.microsoft.com/robots.txt站点地图文件的内容 -

Sitemap: https://www.microsoft.com/en-us/explore/msft_sitemap_index.xml
Sitemap: https://www.microsoft.com/learning/sitemap.xml
Sitemap: https://www.microsoft.com/en-us/licensing/sitemap.xml
Sitemap: https://www.microsoft.com/en-us/legal/sitemap.xml
Sitemap: https://www.microsoft.com/filedata/sitemaps/RW5xN8
Sitemap: https://www.microsoft.com/store/collections.xml
Sitemap: https://www.microsoft.com/store/productdetailpages.index.xml
Sitemap: https://www.microsoft.com/en-us/store/locations/store-locationssitemap.xml

上述内容显示站点地图列出了网站上的 URL,并进一步允许网站管理员指定关于每个 URL 的一些附加信息,例如最后更新日期、内容更改、URL 相对于其他 URL 的重要性等。

网站的大小是多少?

网站的大小,即网站的网页数量会影响我们的爬行方式吗?当然是的。因为如果我们要抓取的网页数量较少,那么效率不会是一个严重的问题,但假设我们的网站有数百万个网页,例如Microsoft.com,那么顺序下载每个网页将需要几个月的时间那么效率将是一个严重的问题。

检查网站的大小

通过检查Google爬虫的结果大小,我们可以估算出一个网站的大小。我们的结果可以通过在进行 Google 搜索时使用关键字站点进行过滤。例如,估计https://authoraditiagarwal.com/的大小如下 -

检查尺寸

可以看到大约有60条结果,这意味着它不是一个大网站,爬行不会导致效率问题。

网站使用什么技术?

另一个重要的问题是网站所使用的技术是否会影响我们的抓取方式?是的,有影响。但是我们如何检查网站所使用的技术呢?有一个名为builtwith的Python库,借助它我们可以了解网站所使用的技术。

例子

在此示例中,我们将借助 Python 库builtwith检查网站 https://authoraditiagarwal.com使用的技术。但在使用这个库之前,我们需要按如下方式安装它 -

(base) D:\ProgramData>pip install builtwith
Collecting builtwith
   Downloading
https://files.pythonhosted.org/packages/9b/b8/4a320be83bb3c9c1b3ac3f9469a5d66e0
2918e20d226aa97a3e86bddd130/builtwith-1.3.3.tar.gz
Requirement already satisfied: six in d:\programdata\lib\site-packages (from
builtwith) (1.10.0)
Building wheels for collected packages: builtwith
   Running setup.py bdist_wheel for builtwith ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\2b\00\c2\a96241e7fe520e75093898b
f926764a924873e0304f10b2524
Successfully built builtwith
Installing collected packages: builtwith
Successfully installed builtwith-1.3.3

现在,借助以下简单的代码行,我们可以检查特定网站使用的技术 -

In [1]: import builtwith
In [2]: builtwith.parse('http://authoraditiagarwal.com')
Out[2]:
{'blogs': ['PHP', 'WordPress'],
   'cms': ['WordPress'],
   'ecommerce': ['WooCommerce'],
   'font-scripts': ['Font Awesome'],
   'javascript-frameworks': ['jQuery'],
   'programming-languages': ['PHP'],
   'web-servers': ['Apache']}

网站的所有者是谁?

网站的所有者也很重要,因为如果所有者以阻止爬虫而闻名,那么爬虫在从网站抓取数据时必须小心。有一个名为Whois的协议,借助它我们可以找到网站的所有者。

例子

在此示例中,我们将在 Whois 的帮助下检查microsoft.com网站的所有者。但在使用这个库之前,我们需要按如下方式安装它 -

(base) D:\ProgramData>pip install python-whois
Collecting python-whois
   Downloading
https://files.pythonhosted.org/packages/63/8a/8ed58b8b28b6200ce1cdfe4e4f3bbc8b8
5a79eef2aa615ec2fef511b3d68/python-whois-0.7.0.tar.gz (82kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 92kB 164kB/s
Requirement already satisfied: future in d:\programdata\lib\site-packages (from
python-whois) (0.16.0)
Building wheels for collected packages: python-whois
   Running setup.py bdist_wheel for python-whois ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\06\cb\7d\33704632b0e1bb64460dc2b
4dcc81ab212a3d5e52ab32dc531
Successfully built python-whois
Installing collected packages: python-whois
Successfully installed python-whois-0.7.0

现在,借助以下简单的代码行,我们可以检查特定网站使用的技术 -

In [1]: import whois
In [2]: print (whois.whois('microsoft.com'))
{
   "domain_name": [
      "MICROSOFT.COM",
      "microsoft.com"
   ],
   -------
   "name_servers": [
      "NS1.MSFT.NET",
      "NS2.MSFT.NET",
      "NS3.MSFT.NET",
      "NS4.MSFT.NET",
      "ns3.msft.net",
      "ns1.msft.net",
      "ns4.msft.net",
      "ns2.msft.net"
   ],
   "emails": [
      "abusecomplaints@markmonitor.com",
      "domains@microsoft.com",
      "msnhst@microsoft.com",
      "whoisrelay@markmonitor.com"
   ],
}

Python 网页抓取 - 数据提取

分析网页意味着了解其结构。现在,问题来了,为什么它对于网络抓取很重要?在本章中,让我们详细了解这一点。

网页分析

网页分析很重要,因为如果不进行分析,我们就无法知道提取后将以哪种形式从该网页(结构化或非结构化)接收数据。我们可以通过以下方式进行网页分析 -

查看页面源代码

这是一种通过检查源代码来了解网页的结构的方法。要实现此目的,我们需要右键单击页面,然后必须选择“查看页面源”选项。然后,我们将从该网页中以 HTML 的形式获取我们感兴趣的数据。但主要担心的是空格和格式,这对我们来说很难格式化。

通过单击检查元素选项检查页面源

这是分析网页的另一种方法。但不同的是,它会解决网页源代码中的格式和空格问题。您可以通过右键单击然后从菜单中选择“检查”“检查元素”选项来实现此目的。它将提供有关该网页的特定区域或元素的信息。

从网页提取数据的不同方法

以下方法主要用于从网页中提取数据 -

正则表达式

它们是嵌入 Python 中的高度专业化的编程语言。我们可以通过Python的re模块来使用它。它也称为 RE 或正则表达式或正则表达式模式。借助正则表达式,我们可以为我们想要从数据中匹配的可能的字符串集指定一些规则。

如果您想了解更多有关正则表达式的一般信息,请访问链接https://www.tutorialspoint.com/automata_theory/regular_expressions.htm,如果您想了解更多有关Python中的re模块或正则表达式的信息,您可以关注链接 https://www.tutorialspoint.com/python/python_reg_expressions.htm

例子

在下面的示例中,我们将在正则表达式的帮助下匹配 <td> 的内容后,从http://example.webscraping.com中抓取有关印度的数据 。

import re
import urllib.request
response =
   urllib.request.urlopen('http://example.webscraping.com/places/default/view/India-102')
html = response.read()
text = html.decode()
re.findall('<td class="w2p_fw">(.*?)</td>',text)

输出

相应的输出将如下所示 -

[
   '<img src="/places/static/images/flags/in.png" />',
   '3,287,590 square kilometres',
   '1,173,108,018',
   'IN',
   'India',
   'New Delhi',
   '<a href="/places/default/continent/AS">AS</a>',
   '.in',
   'INR',
   'Rupee',
   '91',
   '######',
   '^(\\d{6})$',
   'enIN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc',
   '<div>
      <a href="/places/default/iso/CN">CN </a>
      <a href="/places/default/iso/NP">NP </a>
      <a href="/places/default/iso/MM">MM </a>
      <a href="/places/default/iso/BT">BT </a>
      <a href="/places/default/iso/PK">PK </a>
      <a href="/places/default/iso/BD">BD </a>
   </div>'
]

请注意,在上面的输出中,您可以使用正则表达式查看有关印度国家的详细信息。

Beautiful Soup

假设我们想要收集网页上的所有超链接,那么我们可以使用一个名为 BeautifulSoup 的解析器,可以在https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 上了解更多详细信息。简而言之,BeautifulSoup 是一个用于从 HTML 和 XML 文件中提取数据的 Python 库。它可以与请求一起使用,因为它需要输入(文档或 url)来创建 soup 对象,因为它本身无法获取网页。您可以使用以下Python脚本来收集网页标题和超链接。

安装Beautiful Soup

使用pip命令,我们可以在虚拟环境或全局安装中安装beautifulsoup 。

(base) D:\ProgramData>pip install bs4
Collecting bs4
   Downloading
https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89
a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz
Requirement already satisfied: beautifulsoup4 in d:\programdata\lib\sitepackages
(from bs4) (4.6.0)
Building wheels for collected packages: bs4
   Running setup.py bdist_wheel for bs4 ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\a0\b0\b2\4f80b9456b87abedbc0bf2d
52235414c3467d8889be38dd472
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1

例子

请注意,在本示例中,我们扩展了使用 requests python 模块实现的上述示例。我们使用r.text创建一个 soup 对象,该对象将进一步用于获取网页标题等详细信息。

首先,我们需要导入必要的 Python 模块 -

import requests
from bs4 import BeautifulSoup

在下面的代码行中,我们使用 requests 来通过发出 GET 请求来对 URL https://authoraditiagarwal.com/发出 GET HTTP 请求。

r = requests.get('https://authoraditiagarwal.com/')

现在我们需要创建一个 Soup 对象,如下所示 -

soup = BeautifulSoup(r.text, 'lxml')
print (soup.title)
print (soup.title.text)

输出

相应的输出将如下所示 -

<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal

线性XML

我们要讨论的另一个用于网页抓取的 Python 库是 lxml。它是一个高性能的 HTML 和 XML 解析库。它相对快速且简单。您可以在 https://lxml.de/ 上阅读更多内容

安装lxml

使用 pip 命令,我们可以在虚拟环境或全局安装中安装lxml 。

(base) D:\ProgramData>pip install lxml
Collecting lxml
   Downloading
https://files.pythonhosted.org/packages/b9/55/bcc78c70e8ba30f51b5495eb0e
3e949aa06e4a2de55b3de53dc9fa9653fa/lxml-4.2.5-cp36-cp36m-win_amd64.whl
(3.
6MB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 3.6MB 64kB/s
Installing collected packages: lxml
Successfully installed lxml-4.2.5

示例:使用 lxml 和 requests 提取数据

在下面的示例中,我们使用 lxml 和 requests从authoraditiagarwal.com抓取网页的特定元素-

首先,我们需要从 lxml 库导入请求和 html,如下所示 -

import requests
from lxml import html 

现在我们需要提供要废弃的网页的 url

url = https://authoraditiagarwal.com/leadershipmanagement/

现在我们需要提供该网页特定元素的路径(Xpath) -

path = '//*[@id="panel-836-0-0-1"]/div/div/p[1]'
response = requests.get(url)
byte_string = response.content
source_code = html.fromstring(byte_string)
tree = source_code.xpath(path)
print(tree[0].text_content()) 

输出

相应的输出将如下所示 -

The Sprint Burndown or the Iteration Burndown chart is a powerful tool to communicate
daily progress to the stakeholders. It tracks the completion of work for a given sprint
or an iteration. The horizontal axis represents the days within a Sprint. The vertical 
axis represents the hours remaining to complete the committed work.

Python 网页抓取 - 数据处理

在前面的章节中,我们学习了如何通过各种 Python 模块从网页或网页抓取中提取数据。在本章中,让我们研究处理已抓取数据的各种技术。

介绍

为了处理已抓取的数据,我们必须以特定格式(例如电子表格 (CSV)、JSON)或有时将数据存储在 MySQL 等数据库中,将数据存储在本地计算机上。

CSV 和 JSON 数据处理

首先,我们将从网页抓取信息后写入 CSV 文件或电子表格。让我们首先通过一个简单的示例来理解,在该示例中,我们将首先使用BeautifulSoup模块获取信息,就像之前所做的那样,然后使用 Python CSV 模块将文本信息写入 CSV 文件。

首先,我们需要导入必要的 Python 库,如下所示 -

import requests
from bs4 import BeautifulSoup
import csv

在下面的代码行中,我们使用 requests 对 URL https://authoraditiagarwal.com/发出 GET 请求来发出 GET HTTP 请求。

r = requests.get('https://authoraditiagarwal.com/')

现在,我们需要创建一个 Soup 对象,如下所示 -

soup = BeautifulSoup(r.text, 'lxml')

现在,在下一行代码的帮助下,我们将抓取的数据写入名为 dataprocessing.csv 的 CSV 文件中。

f = csv.writer(open(' dataprocessing.csv ','w'))
f.writerow(['Title'])
f.writerow([soup.title.text])

运行此脚本后,文本信息或网页标题将保存在本地计算机上的上述 CSV 文件中。

同样,我们可以将收集到的信息保存在JSON文件中。以下是一个易于理解的 Python 脚本,用于执行相同的操作,其中我们获取与上一个 Python 脚本中相同的信息,但这次获取的信息通过使用 JSON Python 模块保存在 JSONfile.txt 中。

import requests
from bs4 import BeautifulSoup
import csv
import json
r = requests.get('https://authoraditiagarwal.com/')
soup = BeautifulSoup(r.text, 'lxml')
y = json.dumps(soup.title.text)
with open('JSONFile.txt', 'wt') as outfile:
   json.dump(y, outfile)

运行此脚本后,抓取的信息(即网页标题)将保存在本地计算机上的上述文本文件中。

使用 AWS S3 进行数据处理

有时我们可能希望将抓取的数据保存在本地存储中以供存档之用。但是,如果我们需要大规模存储和分析这些数据怎么办?答案是名为 Amazon S3 或 AWS S3(简单存储服务)的云存储服务。基本上,AWS S3 是一种对象存储,旨在从任何地方存储和检索任意数量的数据。

我们可以按照以下步骤在 AWS S3 中存储数据 -

步骤 1 - 首先我们需要一个 AWS 帐户,它将为我们提供在存储数据时在 Python 脚本中使用的密钥。它将创建一个 S3 存储桶,我们可以在其中存储数据。

步骤 2 - 接下来,我们需要安装boto3 Python 库来访问 S3 存储桶。可以借助以下命令进行安装 -

pip install boto3

步骤 3 - 接下来,我们可以使用以下 Python 脚本从网页中抓取数据并将其保存到 AWS S3 存储桶中。

首先,我们需要导入用于抓取的 Python 库,这里我们使用requestsboto3将数据保存到 S3 存储桶。

import requests
import boto3

现在我们可以从 URL 中抓取数据。

data = requests.get("Enter the URL").text

现在为了将数据存储到 S3 存储桶,我们需要创建 S3 客户端,如下所示 -

s3 = boto3.client('s3')
bucket_name = "our-content"

下一行代码将创建 S3 存储桶,如下所示 -

s3.create_bucket(Bucket = bucket_name, ACL = 'public-read')
s3.put_object(Bucket = bucket_name, Key = '', Body = data, ACL = "public-read")

现在,您可以从您的 AWS 账户中检查名为 our-content 的存储桶。

使用MySQL进行数据处理

让我们学习如何使用 MySQL 处理数据。如果你想了解MySQL,那么你可以点击链接https://www.tutorialspoint.com/mysql/。

借助以下步骤,我们可以将数据抓取并处理到 MySQL 表中 -

步骤1 - 首先,通过使用MySQL,我们需要创建一个数据库和表来保存我们抓取的数据。例如,我们使用以下查询创建表 -

CREATE TABLE Scrap_pages (id BIGINT(7) NOT NULL AUTO_INCREMENT,
title VARCHAR(200), content VARCHAR(10000),PRIMARY KEY(id));

步骤 2 - 接下来,我们需要处理 Unicode。请注意,MySQL 默认情况下不处理 Unicode。我们需要在以下命令的帮助下打开此功能,这将更改数据库、表和两列的默认字符集 -

ALTER DATABASE scrap CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE Scrap_pages CONVERT TO CHARACTER SET utf8mb4 COLLATE
utf8mb4_unicode_ci;
ALTER TABLE Scrap_pages CHANGE title title VARCHAR(200) CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE pages CHANGE content content VARCHAR(10000) CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

步骤 3 - 现在,将 MySQL 与 Python 集成。为此,我们需要 PyMySQL,可以通过以下命令进行安装

pip install PyMySQL 

步骤 4 - 现在,我们之前创建的名为 Scrap 的数据库已准备好将从 Web 抓取后的数据保存到名为 Scrap_pages 的表中。在我们的示例中,我们将从维基百科中抓取数据并将其保存到我们的数据库中。

首先,我们需要导入所需的 Python 模块。

from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import pymysql
import re

现在,建立一个连接,即将其与Python集成。

conn = pymysql.connect(host='127.0.0.1',user='root', passwd = None, db = 'mysql',
charset = 'utf8')
cur = conn.cursor()
cur.execute("USE scrap")
random.seed(datetime.datetime.now())
def store(title, content):
   cur.execute('INSERT INTO scrap_pages (title, content) VALUES ''("%s","%s")', (title, content))
   cur.connection.commit()

现在,连接维基百科并从中获取数据。

def getLinks(articleUrl):
   html = urlopen('http://en.wikipedia.org'+articleUrl)
   bs = BeautifulSoup(html, 'html.parser')
   title = bs.find('h1').get_text()
   content = bs.find('div', {'id':'mw-content-text'}).find('p').get_text()
   store(title, content)
   return bs.find('div', {'id':'bodyContent'}).findAll('a',href=re.compile('^(/wiki/)((?!:).)*$'))
links = getLinks('/wiki/Kevin_Bacon')
try:
   while len(links) > 0:
      newArticle = links[random.randint(0, len(links)-1)].attrs['href']
      print(newArticle)
      links = getLinks(newArticle)

最后,我们需要关闭游标和连接。

finally:
   cur.close()
   conn.close()

这将从维基百科收集的数据保存到名为 scrap_pages 的表中。如果你熟悉 MySQL 和网页抓取,那么上面的代码并不难理解。

使用 PostgreSQL 进行数据处理

PostgreSQL 由全球志愿者团队开发,是一个开源关系数据库管理系统 (RDMS)。使用PostgreSQL处理爬取数据的过程与MySQL类似。会有两个变化:首先,命令将与 MySQL 不同,其次,这里我们将使用psycopg2 Python 库来执行与 Python 的集成。

如果您不熟悉 PostgreSQL,可以在 https://www.tutorialspoint.com/postgresql/ 学习。借助以下命令,我们可以安装 psycopg2 Python 库 -

pip install psycopg2 

处理图像和视频

网络抓取通常涉及下载、存储和处理网络媒体内容。在本章中,让我们了解如何处理从网络下载的内容。

介绍

我们在抓取过程中获取的网络媒体内容可以是图像、音频和视频文件,也可以是非网页形式的,也可以是数据文件形式的。但是,我们可以信任下载的数据,尤其是我们要下载并存储在计算机内存中的数据扩展吗?这使得了解我们将在本地存储的数据类型至关重要。

从网页获取媒体内容

在本节中,我们将学习如何根据网络服务器的信息下载正确代表媒体类型的媒体内容。我们可以借助 Python requests模块来完成此操作,就像我们在上一章中所做的那样。

首先,我们需要导入必要的 Python 模块,如下所示 -

import requests

现在,提供我们想要下载并存储在本地的媒体内容的 URL。

url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"

使用以下代码创建 HTTP 响应对象。

r = requests.get(url) 

借助以下代码行,我们可以将接收到的内容保存为 .png 文件。

with open("ThinkBig.png",'wb') as f:
   f.write(r.content) 

运行上面的Python脚本后,我们将得到一个名为ThinkBig.png的文件,其中包含下载的图像。

从 URL 中提取文件名

从网站下载内容后,我们还希望将其保存在一个文件中,该文件的文件名在 URL 中找到。但我们也可以检查 URL 中是否也存在一些附加片段。为此,我们需要从 URL 中找到实际的文件名。

借助以下 Python 脚本,使用urlparse,我们可以从 URL 中提取文件名 -

import urllib3
import os
url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"
a = urlparse(url)
a.path

您可以观察输出,如下所示 -

'/wp-content/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg'
os.path.basename(a.path)

您可以观察输出,如下所示 -

'MetaSlider_ThinkBig-1080x180.jpg'

运行上述脚本后,我们将从 URL 获取文件名。

有关 URL 内容类型的信息

在从Web服务器提取内容的同时,通过GET请求,我们还可以检查Web服务器提供的信息。借助以下 Python 脚本,我们可以确定 Web 服务器对内容类型的含义 -

首先,我们需要导入必要的 Python 模块,如下所示 -

import requests

现在,我们需要提供要下载并存储在本地的媒体内容的 URL。

url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"

以下代码行将创建 HTTP 响应对象。

r = requests.get(url, allow_redirects=True)

现在,我们可以获得网络服务器可以提供哪些类型的内容信息。

for headers in r.headers: print(headers)

您可以观察输出,如下所示 -

Date
Server
Upgrade
Connection
Last-Modified
Accept-Ranges
Content-Length
Keep-Alive
Content-Type

借助以下代码行,我们可以获得有关内容类型的特定信息,例如内容类型 -

print (r.headers.get('content-type'))

您可以观察输出,如下所示 -

image/jpeg

借助以下代码行,我们可以获得有关内容类型的特定信息,例如 EType -

print (r.headers.get('ETag'))

您可以观察输出,如下所示 -

None

观察以下命令 -

print (r.headers.get('content-length'))

您可以观察输出,如下所示 -

12636

借助以下代码行,我们可以获得有关内容类型的特定信息,例如服务器 -

print (r.headers.get('Server'))

您可以观察输出,如下所示 -

Apache

生成图像缩略图

缩略图是非常小的描述或表示。用户可能只想保存大图像的缩略图或同时保存图像和缩略图。在本节中,我们将创建在上一节“从网页获取媒体内容”中下载的名为ThinkBig.png的图像的缩略图。

对于这个 Python 脚本,我们需要安装名为 Pillow 的 Python 库,它是 Python 图像库的一个分支,具有用于操作图像的有用函数。可以借助以下命令进行安装 -

pip install pillow

以下 Python 脚本将创建图像的缩略图,并通过在缩略图文件中添加Th_前缀将其保存到当前目录

import glob
from PIL import Image
for infile in glob.glob("ThinkBig.png"):
   img = Image.open(infile)
   img.thumbnail((128, 128), Image.ANTIALIAS)
   if infile[0:2] != "Th_":
      img.save("Th_" + infile, "png")

上面的代码很容易理解,你可以在当前目录下查看缩略图文件。

网站截图

在网络抓取中,一个非常常见的任务是截取网站的屏幕截图。为了实现这一点,我们将使用 selenium 和 webdriver。以下 Python 脚本将从网站获取屏幕截图并将其保存到当前目录。

From selenium import webdriver
path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)
browser.get('https://tutorialspoint.com/')
screenshot = browser.save_screenshot('screenshot.png')
browser.quit

您可以观察输出,如下所示 -

DevTools listening on ws://127.0.0.1:1456/devtools/browser/488ed704-9f1b-44f0-
a571-892dc4c90eb7
<bound method WebDriver.quit of <selenium.webdriver.chrome.webdriver.WebDriver
(session="37e8e440e2f7807ef41ca7aa20ce7c97")>>

运行脚本后,您可以检查当前目录中是否有snapshot.png文件。

截屏

视频缩略图生成

假设我们从网站下载了视频,并希望为它们生成缩略图,以便可以根据缩略图单击特定视频。为了生成视频缩略图,我们需要一个名为ffmpeg的简单工具,可以从www.ffmpeg.org下载。下载后,我们需要根据操作系统的规范安装它。

以下 Python 脚本将生成视频的缩略图并将其保存到我们的本地目录 -

import subprocess
video_MP4_file = “C:\Users\gaurav\desktop\solar.mp4
thumbnail_image_file = 'thumbnail_solar_video.jpg'
subprocess.call(['ffmpeg', '-i', video_MP4_file, '-ss', '00:00:20.000', '-
   vframes', '1', thumbnail_image_file, "-y"]) 

运行上述脚本后,我们将获得保存在本地目录中名为thumbnail_solar_video.jpg的缩略图。

将 MP4 视频翻录为 MP3

假设您从网站下载了一些视频文件,但您只需要该文件中的音频来满足您的目的,那么可以借助名为moviepy的 Python 库在 Python 中完成,该库可以通过以下命令进行安装-

pip install moviepy

现在,在以下脚本的帮助下成功安装 moviepy 后,我们可以将 MP4 转换为 MP3。

import moviepy.editor as mp
clip = mp.VideoFileClip(r"C:\Users\gaurav\Desktop\1234.mp4")
clip.audio.write_audiofile("movie_audio.mp3")

您可以观察输出,如下所示 -

[MoviePy] Writing audio in movie_audio.mp3
100%|¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 674/674 [00:01<00:00,
476.30it/s]
[MoviePy] Done.

上面的脚本会将音频 MP3 文件保存在本地目录中。

Python 网页抓取 - 处理文本

在上一章中,我们了解了如何处理作为网络抓取内容的一部分获得的视频和图像。在本章中,我们将使用 Python 库来处理文本分析,并将详细了解这一点。

介绍

您可以使用称为自然语言工具包 (NLTK) 的 Python 库执行文本分析。在讨论 NLTK 的概念之前,让我们先了解一下文本分析和网页抓取之间的关系。

分析文本中的单词可以让我们知道哪些单词是重要的,哪些单词是不寻常的,单词是如何分组的。此分析简化了网页抓取的任务。

NLTK 入门

自然语言工具包 (NLTK) 是 Python 库的集合,专门用于识别和标记自然语言(如英语)文本中的词性。

安装NLTK

您可以使用以下命令在 Python 中安装 NLTK -

pip install nltk

如果您使用 Anaconda,则可以使用以下命令构建 NLTK 的 conda 包 -

conda install -c anaconda nltk

下载NLTK的数据

安装NLTK后,我们必须下载预设的文本存储库。但在下载文本之前