《Python3 網路爬蟲開發實戰》—學習筆記

studyeboy 發表於 2019-07-30
Python 爬蟲

開發環境配置

爬蟲可以簡單的分為幾步:抓取頁面、分析頁面和儲存資料。
在抓取頁面的過程中,需要模擬瀏覽器向伺服器發出請求,需要Python庫來實現HTTP請求操作。

請求庫安裝

requests

pip3 install requests

Selenium

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

ChromeDriver

Selenium是一個自動化測試工具,需要瀏覽器來配合使用,ChromeDriver是Chrome瀏覽器的驅動配置。

  • 檢視Google Chrome版本
    在這裡插入圖片描述
  • 下載對應的ChromeDriver
    在這裡插入圖片描述
  • 把下載的ChromeDriver.exe放到Google Chrome對應的目錄下
    在這裡插入圖片描述
  • 把上面的目錄新增到path路徑下
    在這裡插入圖片描述
  • 測試程式碼
from selenium import webdriver
brower = webdriver.Chrome()
  • 執行程式碼後
    在這裡插入圖片描述

PhantomJS

PhantomJS是一個無介面的、可指令碼程式設計的WebKit瀏覽器引擎,它原生支援多種Web標準:DOM操作、CSS選擇器、JSON、Canvas以及SVG。

Selenium支援PhantomJS,這樣在執行的時候就不會再彈出IG瀏覽器了。而且PhantomJS的執行效率也很高,還支援各種引數配置,使用非常方便。

  • 下載
  • 解壓
  • exe檔案放到ChromeDriver相同的目錄下
    在這裡插入圖片描述
  • 驗證
from selenium import webdriver
>>> brower = webdriver.PhantomJS()
>>> brower = webdriver.PhantomJS()
>>> brower.get('https://www.baidu.com')
>>> print(brower.current_url)
https://www.baidu.com/

aiohttp

requests庫是一個阻塞式HTTP請求庫,當我們發出一個請求後,程式會一直等待伺服器響應,直到得到響應後,程式才會進行下一步處理。這個過程比較耗費時間。如果程式可以在這個等待過程中做一些其他的事情,如進行請求的排程、響應的處理等,那麼爬取效率會大大提高。
aiohttp提供非同步web服務的庫,aiohttp的非同步操作藉助於async/await關鍵字的寫法變得更加簡潔,架構更加清晰。使用非同步請求庫進行資料抓取時,會大大提高效率。

pip3 install aiohttp

aiohttp庫需要依賴setuptools庫,如果環境中沒有該庫,需要自己安裝。

pip3 install setuptools

另外官方推薦了兩個庫:一個是字元編碼檢測庫cchardet,另一個是加速DNS的解析庫aiodns。

pip3 install cchardet aiodns

解析庫的安裝

抓取網頁程式碼後,需要從網頁中提取資訊。提取資訊的方式多種多樣,可以使用正則來提取,但是寫起來相對比較繁瑣。可以借鑑強大的解析庫(lxml、Beautiful Soup、pyquery)和解析方法(XPath解析和CSS選擇器解析),利用他們可以高效便捷的從網頁中提取有效的資訊。

lxml

lxml是Python的一個解析庫,支援HTML和XML的解析,支援XPath解析方式,且解析效率非常高。

pip3 install lxml

Beautiful Soup

Beautiful Soup是Python的一個HTML或XML的解析庫,可以方便的從網頁找那個提取資料,它擁有強大的API和多樣的解析方式。

pip3 install beautifusoup4
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<p>Hello</p>', 'lxml')
>>> print(soup.p.string)
Hello

注意:雖然安裝的是beautifulsoup4這個包,但是引入的是bs4,這是因為這個包原始碼本身的庫檔名稱就是bs4,所以安裝完成後,這個庫資料夾就被移入到Python3的lib庫裡,所以識別到的庫檔名就叫作bs4。

pyquery

pyquery網頁解析工具提供和jQuery類似的語法來解析HTML文件,支援CSS選擇器。

pip3 install pyquery

tesserocr

在爬蟲的過程中會遇到各種各樣的驗證碼,大多數的驗證碼是圖形驗證碼,這時候可以直接用OCR來識別。

OCR,即Optical Character Recognition,光學字元識別,是指通過掃描字元,然後通過其形狀將其翻譯成電子文字的過程。對於圖形驗證碼來說,它們都是一些不規則的字元,這些字元確實是由字元稍加扭曲變換得到的內容。

tesserocr是Python的一個OCR識別庫,但其實是對tesseract做的一層Python API封裝,所以它的核心是tesseract。因此,在安裝tesserocr之前,需要先安裝tesseract。

pip3 install tesserocr

資料庫的安裝

作為資料儲存的重要部分,資料庫同樣是必不可少的,資料庫可以分為關係型資料庫和非關係型資料庫。
關係型資料庫如SQLite、MySQL、Oracle、SQL Server、DB2等,其資料庫是以表的形式儲存;非關係型資料庫如MongoDB、Redis,它們的儲存形式是鍵值對,儲存形式更加靈活。

MySQL

MongoDB

MongoDB是由C++語言編寫的非關係型資料庫,是一個基於分散式檔案儲存的開源資料庫系統,其內容儲存形式類似JSON物件,它的欄位值可以包含其他文件、陣列及文件陣列,非常靈活。

Redis

Redis是一個基於記憶體的高效的非關係型資料庫。

儲存庫的安裝

用來儲存資料的資料庫提供了儲存服務,如果和Python互動,還需要安裝Python儲存庫,如MySOL需要安裝P有MySQL,MongoDB需要安裝PyMongo。

PyMySQL

pip3 install pymaysql

PyMongo

pip3 install pymongo

redis-py

pip3 install redis

RedisDump

RedisDump是一個用於Redis資料匯入/匯出的工具,是基於Ruby實現的,所以要安裝RedisDump,需要先安裝Ruby。

Web庫的安裝

日常訪問的網站都是Web服務程式搭建而成的,Python也需要這樣的一些Web伺服器程式,比如Flask、Django等。可以用它們來開發網站和介面等。在網路爬蟲中主要使用這些Web伺服器程式來搭建一些API介面。例如,維護一個代理池,代理儲存在Redis資料庫中,將代理池作為一個公共的元件使用,構建獲取代理的平臺需要通過Web服務提供一個API介面,這樣只需要請求介面即可獲取新的代理,這樣做簡單、高效、實用。

Flask

Flask 是一個輕量級的Web伺服器程式,它簡單、易用、靈活,主要用來做一些API服務。

pip3 install flask

Tornado

Tornado是一個支援非同步的

參考資料

Chrome版本與chromedriver版本對照及下載【親測有效】【71-73】
Download PhantomJS
MySQL安裝教程(Windows系統)