用于网络爬取的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,然后进行解析以检索数据。在使用 Request 之前,让我们了解它的安装。
安装Request
我们可以把它安装在我们的虚拟环境或全局安装中。在 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
在下面这行代码中,我们使用request对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中检索数据,类似于 request 库。你可以在它的技术文档中阅读更多的内容: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
例子:使用Urlib3和BeautifulSoup进行爬取
在下面的例子中,我们通过使用 Urlib3 和 BeautifulSoup 来爬取网页 。 我们在请求库中使用 Ullib3 来获取网页上的原始数据(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)
This is the output you will observe when you run this code −
<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal
Selenium
它是一个开放源码的自动化测试套件,适用于不同浏览器和平台的网络应用。它不是一个单一的工具,而是一个软件套件。我们有Python、Java、C#、Ruby和JavaScript的Selenium绑定。在这里,我们将通过使用Selenium和它的Python绑定来进行网络爬取。你可以在Selenium . NET的链接中了解更多关于Selenium与Java的信息。
Selenium Python绑定提供了一个方便的API来访问Selenium WebDrivers,如Firefox, IE, Chrome, Remote等。目前支持的Python版本是2.7、3.5及以上。
安装Selenium
使用 pip 命令,我们可以将 urllib3 安装在我们的虚拟环境或全局安装中。
pip install selenium
由于Selenium需要一个驱动来与所选的浏览器对接,我们需要下载它。下表显示了不同的浏览器和它们的下载链接。
浏览器 | https://sites.google.com/a/chromium.org/ |
---|---|
Edge 浏览器 | https://developer.microsoft.com/ |
火狐 | https://github.com/ |
浏 览器 | 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脚本控制。
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