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 发出 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://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 进行抓取

    在下面的示例中,我们使用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
    
  • 它是一个开源自动化测试套件,适用于跨不同浏览器和平台的 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 及更高版本。

    安装硒

    使用pip命令,我们可以安装urllib3无论是在我们的虚拟环境中还是在全局安装中。
    
    pip install selenium
    
    由于 selenium 需要驱动程序来与所选浏览器交互,因此我们需要下载它。下表显示了不同的浏览器及其下载链接。
    Chrome
    Edge
    Firefox
    Safari

    例子

    这个例子展示了使用 selenium 进行网页抓取。它也可以用于称为硒测试的测试。
    下载指定版本浏览器的特定驱动程序后,我们需要用 Python 进行编程。
    一、需要导入webdriver从硒如下 -
    
    from selenium import webdriver
    
    现在,提供我们根据要求下载的网络驱动程序的路径 -
    
    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 是一个用 Python 编写的快速、开源的网络爬虫框架,用于在基于 XPath 的选择器的帮助下从网页中提取数据。Scrapy 于 2008 年 6 月 26 日首次发布,获得 BSD 许可,并于 2015 年 6 月发布里程碑 1.0。它为我们提供了从网站提取、处理和构建数据所需的所有工具。

    安装 Scrapy

    使用pip命令,我们可以安装urllib3无论是在我们的虚拟环境中还是在全局安装中。
    
    pip install scrapy
    
    有关 Scrapy 的更多详细研究,您可以转到链接 Scrapy