摘要
用python寫爬蟲的時候沒我們經常遇到https認證的網站,採用常用模塊requests模塊,我們一般在請求中將verify設置成假,免證書驗證,但是這些都是理想狀態,https請求很容易報錯,一旦報錯就難以解決。
舉個列子
編寫一個簡單的列子,我們的目標對象是一個https的網站,它的編碼是gb2312,按照常用手法,我們設置免驗證的方法,按照我們正常的邏輯,肯定是能成功,但是這裡卻不符合邏輯
下面開始運行代碼:
報錯的信息,無非是ssl的各種報錯,我這裡是 Caused by SSLError(SSLError("bad handshake: SysCallError(-1, 'Unexpected EOF')",),),然今天今天要講的就是解決一切SSLError
解決思路
既然是http是認證出了問題,那麼我們就去修改代碼解決,代碼解決不了,我就讓第三方程序去解決,那這第三方軟體都屬於那些?很多,就是抓包軟體並且支持https,比如像fiddler什麼的軟體...這種法法的原理:就是一個代理伺服器原理,python寫的爬蟲會報錯,但代理伺服器不會報錯,所以我們這邊就是採用這樣的思路,不過是本地版的代理伺服器。
開始搭建
我這邊採用的抓包軟體是burpsuit,這是一款非常牛逼的抓包軟體,因為之前做滲透工作,所以burpsuit比較順手。burpsuit的其他用法,我們可以百度一下,burpsuit這個比較出名的,我們下載這個抓包軟體,然後設置他的證書(burpsuit抓https大家自行百度),讓他可以支持https抓包就可以了,burpsuit安裝前請安裝java的環境,他是用java的開發,下載下來後,我們啟動軟體,點擊proxy這個選項
然後我們點擊intercept is on 讓它變成off狀態,然後在點擊options,
進入options,我們可以看見,我們現在的代理伺服器是127.0.0.1:8080
burpsuit一打開默認就是127.0.0.1:8080,這樣就是一個簡單的代理伺服器。那麼我們在爬蟲中只要添加這個代理ip,就可以繞過ssl錯誤,當然你可以在瀏覽器internet設置成全局代理ip,這樣就不用修改代碼他也是成功的,我這邊修改了代理,大家可以看看是否成功:
修改代碼
驗證方案
修改完爬蟲,我們點擊運行,效果是預想的一樣的的,完美解決了https產生的ssl認證的問題
後話
總的來說,這種方法可以搞定一切https的問題,但是有一個問題,一直困擾我好久,代理ip的問題,我在本地設置代理伺服器,代理的出口就是本地的ip,那麼一旦我訪問頻率過高,我的代理伺服器的ip也是會被封殺,所以這裡呢需要一個代理伺服器的二次代理的問題,貌似這個問題不太好解決;希望大家可以給一點思路解決這個問題,
有什麼問題與建議可以聯繫我chinapython@yeah.net
如果你感覺文章可以,盡情點讚!!!收藏!!!您的點讚是我前進的動力!!!