1.1 簡介
· 爬蟲是請求網站並提取數據的自動化程序
· 爬蟲能夠簡單分爲幾步:抓取頁面、分析頁面、存儲數據。
1.2 請求庫的安裝
· 在第一步抓取頁面的過程當中,咱們就須要模擬瀏覽器向服務器發出請求,涉及到的第三方庫有 Requests、Selenium、Aiotttp 等。
· Selenium自動化測試工具,利用它咱們能夠驅動瀏覽器執行特定的動做,如點擊、下拉等等操做,對於一些 JavaScript 渲染的頁面來講,此種抓取方式很是有效。
> 安裝Requests、Selenium
> 安裝ChromeDriver
#安裝後測試
from selenium import webdriver
browser = webdriver.Chrome()
· Requests 庫是一個阻塞式 HTTP 請求庫,發出請求後須要等待服務器響應,耗時。若是能夠在等待過程當中作一些其餘事情,好比進行請求調度、相應處理等,能夠提升效率。Aiohttp 就是這樣一個提供異步 Web 服務的庫,藉助於 async/await關鍵字寫法更加簡潔,架構更清晰。html
> 安裝aiohttp
pip3 install aiohttp==3.0.0
1.3 解析庫的安裝
抓取代碼後,下一步是從網頁中提取信息。易用的解析庫有 LXML、BeautifulSoup、PyQuery 等等,提供了很是強大的解析方法,如 XPath 解析、CSS 選擇器解析等等。
> 安裝上述三個包
> 安裝tesseract庫識別OCR
1.4 數據庫的安裝
關係型數據庫如 SQLite、MySQL、Oracle、SQL Server、DB2 等,其數據庫是以表的形式存儲。
非關係型數據庫如MongoDB、Redis,它們的存儲形式是鍵值對,存儲形式更加靈活。
1.4.1 MySQL
一個輕量級的關係型數據庫,以表的形式來存儲數據
brew install mysql
brew services start mysql
brew services stop mysql
1.4.2 MongoDB
由 C++ 語言編寫的非關係型數據庫,是一個基於分佈式文件存儲的開源數據庫系統,其內容存儲形式相似 Json 對象,它的字段值能夠包含其餘文檔,數組及文檔數組,很是靈活。
brew install mongodb
brew services start mongodb
sudo mongod
brew services stop mongodb
>下載可視化工具robo3t
1.4.3 Redis安裝
Redis 是一個基於內存的高效的非關係型數據庫
brew install redis
brew services start redis #啓動服務
redis-server /usr/local/etc/redis.conf
Mac 下 Redis 的配置文件路徑是 /usr/local/etc/redis.conf,能夠經過修改它來配置訪問密碼。
1.5 存儲庫的安裝
安裝python對應的庫
pip3 install pymysql, pymongo, redispy
RedisDump 是一個用於 Redis 數據導入導出的工具,是基於 Ruby 實現的,因此要安裝 RedisDump 須要先安裝Ruby。
1.6 Web庫的安裝
python中web服務程序:Flask、Django 等,來開發網站,開發接口
須要web服務程序來搭建一些API接口,供爬蟲使用。
Flask 是一個輕量級的 Web 服務程序,簡單、易用、靈活,在本書中咱們主要用它來作一些 API 服務,
Tornado 是一個支持異步的Web框架,經過使用非阻塞 I/O 流,它能夠支撐成千上萬的開放鏈接。後續將用tornado+redis搭建一個ADSL撥號代理池。
1.7 APP爬取相關庫的安裝(須要的時候再裝)
除了網頁,爬蟲也能夠對app數據進行爬取。通常是經過請求服務器的接口來獲取的,主要要利用抓包技術。包括:Charles、MitmProxy、MitmDump,APP
Charles 來做爲主要的移動端抓包工具,用於分析移動 APP 的數據包,輔助完成 APP 數據抓取工做。
MitmProxy 是一個支持 HTTP 和 HTTPS 的抓包程序,相似 Fiddler、Charles 的功能,只不過它是一個控制檯的形式操做。
同時 MitmProxy 還有兩個關聯組件,一個是 MitmDump,它是 MitmProxy 的命令行接口,利用它咱們能夠對接 Python 腳本,用 Python 實現監聽後的處理。另外一個是 MitmWeb,它是一個 Web 程序,經過它咱們能夠清楚地觀察到 MitmProxy 捕獲的請求。
Appium 是移動端的自動化測試工具,相似於前面所說的 Selenium,利用它咱們能夠驅動 Android、iOS 等設備完成自動化測試,好比模擬點擊、滑動、輸入等操做,
1.8 爬蟲框架的安裝
利用框架,不需再關心某些功能的具體實現,只需關心爬取邏輯。能夠大大簡化代碼量,並且架構也會變得清晰,爬取效率也會高許多。
1.8.1 PySpider
PySpider 是國人 binux 編寫的強大的網絡爬蟲框架,它帶有強大的 WebUI、腳本編輯器、任務監控器、項目管理器以及結果處理器,同時它支持多種數據庫後端、多種消息隊列,另外它還支持 JavaScript 渲染頁面的爬取,
pip3 install
後直接在瀏覽器打開:http://localhost:5000/
1.8.2 Scrapy安裝
1.8.3 ScrapySplash安裝
ScrapySplash 是一個 Scrapy 中支持 JavaScript 渲染的工具
ScrapySplash 的安裝分爲兩部分,一個是是 Splash 服務的安裝,安裝方式是經過 Docker,安裝以後會啓動一個 Splash 服務,咱們能夠經過它的接口來實現 JavaScript 頁面的加載。另一個是 ScrapySplash 的 Python 庫的安裝,安裝以後便可在 Scrapy 中使用 Splash 服務。
安裝時需運行docker,完成後
http://localhost:8050 便可看到splash主頁
1.8.4 ScrapyRedis的安裝
1.9 部署庫的安裝
大規模抓取數據,分佈式爬蟲。一份代碼部署到多臺主機上協同運行
對於 Scrapy 來講,它有一個擴展組件叫作 Scrapyd,咱們只須要安裝 Scrapyd 便可遠程管理 Scrapy 任務,包括部署源碼、啓動任務、監放任務等操做。另外還有 ScrapydClient 和 ScrapydAPI 來幫助咱們更方便地完成部署和監聽操做。
另外還有一種部署方式就是 Docker 集羣部署,咱們只須要將爬蟲製做爲 Docker 鏡像,只要主機安裝了 Docker,就能夠直接運行爬蟲,而無需再去擔憂環境配置、版本問題。
1.9.1 Docker安裝
Docker 是一種容器技術,它能夠將應用和環境等進行打包,造成一個獨立的,相似於 iOS 的 APP 形式的「應用」,這個應用能夠直接被分發到任意一個支持 Docker 的環境中,經過簡單的命令便可啓動運行。Docker 是一種最流行的容器化實現方案。和虛擬化技術相似,它極大的方便了應用服務的部署;又與虛擬化技術不一樣,它以一種更輕量的方式實現了應用服務的打包。使用 Docker 可讓每一個應用彼此相互隔離,在同一臺機器上同時運行多個應用,不過他們彼此之間共享同一個操做系統。Docker 的優點在於,它能夠在更細的粒度上進行資源的管理,也比虛擬化技術更加節約資源。
docker鏡像加速器:阿里雲或DaoCloud
1.9.2 Scrapyd的安裝
Scrapyd 是一個用於部署和運行 Scrapy 項目的工具。有了它,你能夠將寫好的 Scrapy 項目上傳到雲主機並經過 API 來控制它的運行。但主要針對Linux主機
1.9.3 ScrapydClient的安裝
...