1.2 請求庫的安裝


1.2 請求庫的安裝

爬蟲可以簡單分為幾步:抓取頁面、分析頁面和存儲數據。

在抓取頁面的過程中,我們需要模擬瀏覽器向服務器發出請求,所以需要用到一些 Python 庫來實現 HTTP 請求操作。在本書中,我們用到的第三方庫有 requests、Selenium 和 aiohttp 等。

在本節中,我們介紹一下這些請求庫的安裝方法。

1.2.1 requests 的安裝

由於 requests 屬於第三方庫,也就是 Python 默認不會自帶這個庫,所以需要我們手動安裝。下面我們首先看一下它的安裝過程。

1. 相關鏈接

2. pip 安裝

無論是 Windows、Linux 還是 Mac,都可以通過 pip 這個包管理工具來安裝。

在命令行界面中運行如下命令,即可完成 requests 庫的安裝:

pip3 install requests

這是最簡單的安裝方式,推薦使用這種方法安裝。

3. wheel 安裝

wheel 是 Python 的一種安裝包,其后綴為 .whl,在網速較差的情況下可以選擇下載 wheel 文件再安裝,然后直接用 pip3 命令加文件名安裝即可。

不過在這之前需要先安裝 wheel 庫,安裝命令如下:

pip3 install wheel

然后到 PyPI 上下載對應的 wheel 文件,如最新版本為 2.17.3,則打開:https://pypi.python.org/pypi/requests/2.17.3#downloads,下載 requests-2.17.3-py2.py3-none-any.whl 到本地。

隨后在命令行界面進入 wheel 文件目錄,利用 pip 安裝即可:

pip3 install requests-2.17.3-py2.py3-none-any.whl

這樣我們也可以完成 requests 的安裝。

4. 源碼安裝

如果你不想用 pip 來安裝,或者想獲取某一特定版本,可以選擇下載源碼安裝。

此種方式需要先找到此庫的源碼地址,然后下載下來再用命令安裝。

requests 項目的地址是:https://github.com/kennethreitz/requests

可以通過 Git 來下載源代碼:

git clone git://github.com/kennethreitz/requests.git

或通過 curl 下載:

curl -OL https://github.com/kennethreitz/requests/tarball/master

下載下來之后,進入目錄,執行如下命令即可安裝:

cd requests
python3 setup.py install

命令執行結束后即可完成 requests 的安裝。由於這種安裝方式比較煩瑣,后面不再贅述。

5. 驗證安裝

為了驗證庫是否已經安裝成功,可以在命令行模式測試一下:

$ python3
>>> import requests

首先輸入 python3,進入命令行模式,然后輸入上述內容,如果什么錯誤提示也沒有,就證明已經成功安裝了 requests。

1.2.2 Selenium 的安裝

Selenium 是一個自動化測試工具,利用它我們可以驅動瀏覽器執行特定的動作,如點擊、下拉等操作。對於一些 JavaScript 渲染的頁面來說,這種抓取方式非常有效。下面我們來看看 Selenium 的安裝過程。

1. 相關鏈接

2. pip 安裝

這里推薦直接使用 pip 安裝,執行如下命令即可:

pip3 install selenium

3. wheel 安裝

此外,也可以到 PyPI 下載對應的 wheel 文件進行安裝,下載地址為 https://pypi.python.org/pypi/selenium/#downloads,如最新版本為 3.4.3,則下載 selenium-3.4.3-py2.py3-none-any.whl 即可。

然后進入 wheel 文件目錄,使用 pip 安裝:

pip3 install selenium-3.4.3-py2.py3-none-any.whl

4. 驗證安裝

進入 Python 命令行交互模式,導入 Selenium 包,如果沒有報錯,則證明安裝成功:

$ python3
>>> import selenium

但這樣做還不夠,因為我們還需要用瀏覽器(如 Chrome、Firefox 等)來配合 Selenium 工作。

后面我們會介紹 Chrome、Firefox、PhantomJS 三種瀏覽器的配置方式。有了瀏覽器,我們才可以配合 Selenium 進行頁面的抓取。

1.2.3 ChromeDriver 的安裝

前面我們成功安裝好了 Selenium 庫,但是它是一個自動化測試工具,需要瀏覽器來配合使用,本節中我們就介紹一下 Chrome 瀏覽器及 ChromeDriver 驅動的配置。

首先,下載 Chrome 瀏覽器,方法有很多,在此不再贅述。

隨后安裝 ChromeDriver。因為只有安裝 ChromeDriver,才能驅動 Chrome 瀏覽器完成相應的操作。下面我們來介紹下怎樣安裝 ChromeDriver。

1. 相關鏈接

2. 准備工作

在這之前請確保已經正確安裝好了 Chrome 瀏覽器並可以正常運行,安裝過程不再贅述。

3. 查看版本

點擊 Chrome 菜單 “幫助”→“關於 Google Chrome”,即可查看 Chrome 的版本號,如圖 1-13 所示。

圖 1-13 Chrome 版本號

這里我的 Chrome 版本是 58.0。

請記住 Chrome 版本號,因為選擇 ChromeDriver 版本時需要用到。

4. 下載 ChromeDriver

打開 ChromeDriver 的官方網站,可以看到最新版本為 2.31,其支持的 Chrome 瀏覽器版本為 58~60,官網頁面如圖 1-14 所示。

圖 1-14 官網頁面

如果你的 Chrome 版本號是 58~60,那么可以選擇此版本下載。

如果你的 Chrome 版本號不在此范圍,可以繼續查看之前的 ChromeDriver 版本。每個版本都有相應的支持 Chrome 版本的介紹,請找好自己的 Chrome 瀏覽器版本對應的 ChromeDriver 版本再下載,否則可能無法正常工作。

找好對應的版本號后,隨后到 ChromeDriver 鏡像站下載對應的安裝包即可,鏈接為 https://chromedriver.storage.googleapis.com/index.html。在不同平台下,可以下載不同的安裝包。

5. 環境變量配置

下載完成后,將 ChromeDriver 的可執行文件配置到環境變量下。

在 Windows 下,建議直接將 chromedriver.exe 文件拖到 Python 的 Scripts 目錄下,如圖 1-15 所示。

圖 1-15 Python Scripts 目錄

此外,也可以單獨將其所在路徑配置到環境變量,具體的配置方法請參見 1.1 節。

在 Linux 和 Mac 下,需要將可執行文件配置到環境變量或將文件移動到屬於環境變量的目錄里。

例如,要移動文件到 /usr/bin 目錄。首先,需要在命令行模式下進入其所在路徑,然后將其移動到 /usr/bin 目錄:

sudo mv chromedriver /usr/bin

另外,如果你的系統是 Mac OS X El Capitan 10.11 及更新的系統版本的話,需要先關閉 Rootless 內核保護機制,具體可參考:http://www.pc6.com/edu/86809.html

當然,也可以將 ChromeDriver 配置到 $PATH。首先,可以將可執行文件放到某一目錄,目錄可以任意選擇,例如將當前可執行文件放在 /usr/local/chromedriver 目錄下,接下來在 Linux 下可以修改~/.profile 文件,在 Mac 下可以修改~/.bash_profile 文件,添加如下內容:

export PATH="$PATH:/usr/local/chromedriver"

保存后在 Linux 下執行如下命令:

source ~/.profile

在 Mac 下執行如下命令:

source ~/.bash_profile

即可完成環境變量的添加。

6. 驗證安裝

配置完成后,就可以在命令行下直接執行 chromedriver 命令了:

chromedriver

如果輸入控制台有類似圖 1-16 所示的輸出,則證明 ChromeDriver 的環境變量配置好了。

圖 1-16 控制台輸出

隨后再在程序中測試。執行如下 Python 代碼:

from selenium import webdriver
browser = webdriver.Chrome()

運行之后,如果彈出一個空白的 Chrome 瀏覽器,則證明所有的配置都沒有問題。如果沒有彈出,請檢查之前的每一步配置。

如果彈出后閃退,則可能是 ChromeDriver 版本和 Chrome 版本不兼容,請更換 ChromeDriver 版本。

如果沒有問題,接下來就可以利用 Chrome 來做網頁抓取了。

1.2.4 GeckoDriver 的安裝

上一節中,我們了解了 ChromeDriver 的配置方法,配置完成之后便可以用 Selenium 驅動 Chrome 瀏覽器來做相應網頁的抓取。

那么對於 Firefox 來說,也可以使用同樣的方式完成 Selenium 的對接,這時需要安裝另一個驅動 GeckoDriver。

本節中,我們來介紹一下 GeckoDriver 的安裝過程。

1. 相關鏈接

2. 准備工作

在這之前請確保已經正確安裝好了 Firefox 瀏覽器並可以正常運行,安裝過程不再贅述。

3. 下載 GeckoDriver

我們可以在 GitHub 上找到 GeckoDriver 的發行版本,當前最新版本為 0.18,下載頁面如圖 1-17 所示。

圖 1-17 GeckoDriver 下載頁面

這里可以在不同的平台上下載,如 Windows、Mac、Linux、ARM 等平台,我們可以根據自己的系統和位數選擇對應的驅動下載,若是 Windows 64 位,就下載 geckodriver-v0.18.0-win64.zip。

4. 環境變量配置

在 Windows 下,可以直接將 geckodriver.exe 文件拖到 Python 的 Scripts 目錄下,如圖 1-18 所示。

圖 1-18 將 geckodriver.exe 文件拖到 Python Scripts 目錄

此外,也可以單獨將其所在路徑配置到環境變量,具體的配置方法請參 1.1 節。

在 Linux 和 Mac 下,需要將可執行文件配置到環境變量或將文件移動到屬於環境變量的目錄里。

例如,要移動文件到 /usr/bin 目錄。首先在命令行模式下進入其所在路徑,然后將其移動到 /usr/bin:

sudo mv geckodriver /usr/bin

當然,也可以將 GeckoDriver 配置到 $PATH。首先,可以將可執行文件放到某一目錄,目錄可以任意選擇,例如將當前可執行文件放在 /usr/local/geckodriver 目錄下。接下來可以修改~/.profile 文件,然后添加如下一句配置:

export PATH="$PATH:/usr/local/geckodriver"

保存后執行如下命令即可完成配置:

source ~/.profile

5. 驗證安裝

配置完成后,就可以在命令行下直接執行 geckodriver 命令測試:

geckodriver

這時如果控制台有類似圖 1-19 所示的輸出,則證明 GeckoDriver 的環境變量配置好了。

圖 1-19 控制台輸出

隨后執行如下 Python 代碼。在程序中測試一下:

from selenium import webdriver  
browser = webdriver.Firefox()

運行之后,若彈出一個空白的 Firefox 瀏覽器,則證明所有的配置都沒有問題;如果沒有彈出,請檢查之前的每一步配置。

如果沒有問題,接下來就可以利用 Firefox 配合 Selenium 來做網頁抓取了。

現在我們就可以使用 Chrome 或 Firefox 進行網頁抓取了,但是這樣可能有個不方便之處:因為程序運行過程中需要一直開着瀏覽器,在爬取網頁的過程中瀏覽器可能一直動來動去。目前最新的 Chrome 瀏覽器版本已經支持無界面模式了,但如果版本較舊的話,就不支持。所以這里還有另一種選擇,那就是安裝一個無界面瀏覽器 PhantomJS,此時抓取過程會在后台運行,不會再有窗口出現。在下一節中,我們就來了解一下 PhantomJS 的相關安裝方法。

1.2.5 PhantomJS 的安裝

PhantomJS 是一個無界面的、可腳本編程的 WebKit 瀏覽器引擎,它原生支持多種 Web 標准:DOM 操作、CSS 選擇器、JSON、Canvas 以及 SVG。

Selenium 支持 PhantomJS,這樣在運行的時候就不會再彈出一個瀏覽器了。而且 PhantomJS 的運行效率也很高,還支持各種參數配置,使用非常方便。下面我們就來了解一下 PhantomJS 的安裝過程。

1. 相關鏈接

2. 下載 PhantomJS

我們需要在官方網站下載對應的安裝包,PhantomJS 支持多種操作系統,比如 Windows、Linux、Mac、FreeBSD 等,我們可以選擇對應的平台並將安裝包下載下來。

下載完成后,將 PhantomJS 可執行文件所在的路徑配置到環境變量里。比如在 Windows 下,將下載的文件解壓之后並打開,會看到一個 bin 文件夾,里面包括一個可執行文件 phantomjs.exe,我們需要將它直接放在配置好環境變量的路徑下或者將它所在的路徑配置到環境變量里。比如,我們既可以將它直接復制到 Python 的 Scripts 文件夾,也可以將它所在的 bin 目錄加入到環境變量。

Windows 下環境變量的配置可以參見 1.1 節,Linux 及 Mac 環境變量的配置可以參見 1.2.3 節,在此不再贅述,關鍵在於將 PhantomJS 的可執行文件所在路徑配置到環境變量里。

配置成功后,可以在命令行下測試一下,輸入:

phantomjs

如果可以進入到 PhantomJS 的命令行,那就證明配置完成了,如圖 1-20 所示。

圖 1-20 控制台

3. 驗證安裝

在 Selenium 中使用的話,我們只需要將 Chrome 切換為 PhantomJS 即可:

from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get('https://www.baidu.com')
print(browser.current_url)

運行之后,我們就不會發現有瀏覽器彈出了,但實際上 PhantomJS 已經運行起來了。這里我們訪問了百度,然后將當前的 URL 打印出來。

控制台的輸出如下:

https://www.baidu.com/

如此一來,我們便完成了 PhantomJS 的配置,后面可以利用它來完成一些頁面的抓取。

這里我們介紹了 Selenium 對應的三大主流瀏覽器的對接方式,后面我們會對 Selenium 及各個瀏覽器的對接方法進行更加深入的探究。

1.2.6 aiohttp 的安裝

之前介紹的 requests 庫是一個阻塞式 HTTP 請求庫,當我們發出一個請求后,程序會一直等待服務器響應,直到得到響應后,程序才會進行下一步處理。其實,這個過程比較耗費時間。如果程序可以在這個等待過程中做一些其他的事情,如進行請求的調度、響應的處理等,那么爬取效率一定會大大提高。

aiohttp 就是這樣一個提供異步 Web 服務的庫,從 Python 3.5 版本開始,Python 中加入了 async/await 關鍵字,使得回調的寫法更加直觀和人性化。aiohttp 的異步操作借助於 async/await 關鍵字的寫法變得更加簡潔,架構更加清晰。使用異步請求庫進行數據抓取時,會大大提高效率,下面我們來看一下這個庫的安裝方法。

1. 相關鏈接

2. pip 安裝

這里推薦使用 pip 安裝,命令如下:

pip3 install aiohttp

另外,官方還推薦安裝如下兩個庫:一個是字符編碼檢測庫 cchardet,另一個是加速 DNS 的解析庫 aiodns。安裝命令如下:

pip3 install cchardet aiodns

3. 測試安裝

安裝完成之后,可以在 Python 命令行下測試:

$ python3
>>> import aiohttp

如果沒有錯誤報出,則證明庫已經安裝好了。

我們會在后面的實例中用到這個庫,比如維護一個代理池時,利用異步方式檢測大量代理的運行狀況,會極大地提升效率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM