- Python 网页抓取教程
- Python 网页抓取 - 主页
- 介绍
- Python 入门
- 用于网页抓取的 Python 模块
- 网页抓取的合法性
- 数据提取
- 数据处理
- 处理图像和视频
- 处理文本
- 抓取动态网站
- 抓取基于表单的网站
- 处理验证码
- 使用刮刀进行测试
- Python 网页抓取资源
- Python 网页抓取 - 快速指南
- Python 网页抓取 - 资源
- Python 网页抓取 - 讨论
用于网页抓取的 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 进行抓取
在下面的示例中,我们使用Urllib3和BeautifulSoup抓取网页。我们在请求库的地方使用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