用于网页抓取的 Python 模块


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

使用 virtualenv 的 Python 开发环境


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

可以使用以下命令安装 虚拟环境

(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 ,让我们了解它的安装。

安装请求

我们可以将它安装在我们的虚拟环境或全局安装中。在...的帮助下 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 发出 GET HTTP 请求: https://authoraditiagarwal.com/ 通过发出 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:
>\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 进行抓取

在下面的示例中,我们使用 Urllib3 and 美丽汤 .我们正在使用 Urllib3 在请求库的位置,用于从网页获取原始数据 (HTML)。然后我们使用 美丽汤 用于解析该 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 with Java 的信息 Selenium .

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

安装硒

使用 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 进行网页抓取。它也可以用于称为硒测试的测试。

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

一、需要导入 网络驱动程序 从硒如下:

from selenium import webdriver

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

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

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

我们还可以通过提供 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