在之前的博客中,我們學習了selenium的用法,它是一個動態抓取頁面的方法,但是,動態抓取頁面還有其他的方法,這里介紹Splash方法,並結合具體實例進行講解。
一:Splash簡介與准備
1.簡介
Splash是一個JavaScript渲染服務,說到js大家肯定會想到網頁,對的,Splash是Scrapy中支持JavaScrapy渲染的工具,是一個帶有HTTP API的輕量級瀏覽器,可以進行動態渲染頁面的抓取。
2.安裝
Scrapy-Splash安裝有兩個方法,這里我們用Docker進行安裝,因此首先要安裝Docker(多容器技術,將應用和環境進行打包,形成一個獨立的"應用",可以讓每個應用隔離,適合於大規模爬蟲系統),下載地址為:
https://docs.docker.com/docker-for-windows/install/
下載后安裝,會出現 docker desktop requires Windows 10 Pro or Enterprise version 15063問題。
這個問題是windows10家庭版不支持Hyper-V,無法安裝docker,需要下載docker toolbox安裝。地址為:
http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/
也可以開啟Hyper-V進行安裝,這里就不具體說明了。
安裝后打開cmd控制台,會有下面的結果,說明運行成功(安裝的過程很麻煩,需要耐心):
下面就是用安裝Scrapy-Splash了,安裝的命令為:
docker run -p 8050:8050 scrapinghub/splash
這里的話,我在環境配置上出了問題,再bios中把Intel Virtualization Technology已經設置為enable,但是再運行docker時還是出現了問題,在外部的因特爾虛擬化技術已經打開了,但是卻用不了virutualBox虛擬機。這里等到之后的博客,繼續為大家講解Splash。如果大家有知道原因的話,可以和我交流。
二:驗證碼的識別(1)
現在,許多網站都用各種各樣的措施進行反爬蟲,其中一項就是用驗證碼。而且驗證碼現在已經發展得有很多種,而且交互式驗證碼已經越來越流行,需要鼠標操作的也越來越多,這也造成爬蟲的工作越發艱難,下面就先介紹如何用python識別常見的一種圖形驗證碼。
圖形驗證碼的識別
圖形驗證碼是最早的驗證碼,很常見,一般有字母和數字組成,我們先保存網上的一些驗證碼圖片,如下:
(1)使用的識圖技術
OCR技術:光學字符識別,是指通過掃描字符·,然后通過形狀將其翻譯成電子文本的過程。
(2)識圖用到的庫
tesserocr庫:Python的一個OCR識別庫,是對tesseract做的一層封裝,因此需要先安裝tesseract,然后安裝tesserocr,安裝過程這里就不詳講了。
(3)識圖方法實現
import tesserocr
from PIL import Image
image = Image.open('1.jpg')
result = tesserocr.image_to_text(image)
print(result)
識別前后的圖片和結果如下:
還有其他方法也可以識別驗證碼,就是用file_to_text()方法直接將圖片文件轉化為字符串,我們換張圖片如下:
print(tesserocr.file_to_text('2.jpg'))
識別前后的圖片和結果如下:
我們看到識別的結果和我們想要的有所區別,但其實是線條阻擋了,在下面的博客中會介紹如何處理。
其他的驗證碼識別如下: