用于网络爬取的 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 库。

Requests

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

安装 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 请求。为此,我们需要首先导入 requests 库,如下所示:

In [1]: import requests

在以下代码行中,我们使用 requests 对 url:https://authoraditiagarwal.com/ 发出 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'

Urllib3

这是另一个 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代替 requests 库从网页获取原始数据(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上了解有关 Selenium 与 Java 的更多信息。

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

现在,提供我们根据需要下载的 web 驱动程序的路径:

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

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

安装 Scrapy

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

pip install scrapy

要更详细地学习 Scrapy,您可以访问链接Scrapy

广告