用于网络抓取的 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 请求。 为此,我们需要首先导入请求库,如下所示 −

In [1]: import requests

在下面这行代码中,我们使用 requests 对 url: https://authoraditiagarwal.com/ 发出 GET HTTP 请求,方法是发出 GET 请求。

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 库,可用于从类似于 requests 库的 URL 中检索数据。 您可以在 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 绑定来执行 Web 抓取。

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

安装 Selenium

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

pip install selenium

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

Chrome

https://sites.google.com/a/chromium.org/

Edge

https://developer.microsoft.com/

Firefox

https://github.com/

Safari

https://webkit.org/

示例

这个例子展示了使用 selenium 的网络抓取。 它也可以用于测试,称为 selenium 测试。

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

首先,需要从 selenium 中导入 webdriver 如下 −

from selenium import webdriver

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

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

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

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

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

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

You can check the browser, controlled by Python script, for output.


Scrapy

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

安装 Scrapy

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

pip install scrapy