用於網路爬取的 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 請求。為此,我們需要首先匯入 requests 庫,如下所示:

In [1]: import requests

在以下程式碼行中,我們使用 requests 對 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 檢索資料,類似於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代替 requests 庫從網頁獲取原始資料(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上了解有關 Selenium 與 Java 的更多資訊。

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

現在,提供我們根據需要下載的 web 驅動程式的路徑:

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

Scrapy 是一個用 Python 編寫的快速、開源的網路爬取框架,用於藉助基於 XPath 的選擇器從網頁中提取資料。Scrapy 於 2008 年 6 月 26 日首次釋出,獲得 BSD 許可,並在 2015 年 6 月釋出了里程碑式的 1.0 版本。它為我們提供了從網站提取、處理和構建資料所需的所有工具。

安裝 Scrapy

使用pip命令,我們可以在虛擬環境或全域性安裝中安裝urllib3

pip install scrapy

要更詳細地學習 Scrapy,您可以訪問連結Scrapy

廣告