1. 程式人生 > >python爬蟲(3)——SSL證書與Handler處理器

python爬蟲(3)——SSL證書與Handler處理器

pan 高級 訪問網站 size cos 中文名 ssl 內核 pos

一、SSL證書問題    

    

    上一篇文章,我們創建了一個小爬蟲,下載了上海鏈家房產的幾個網頁。實際上我們在使用urllib聯網的過程中,會遇到證書訪問受限的問題。

    處理HTTPS請求SSL證書驗證,如果SSL證書驗證不通過,會警告用戶證書不受信任(即沒有通過AC認證)。

    

技術分享圖片

  上圖左邊我們可以看到SSL驗證失敗,所以以後遇到這些網站我們需要單獨處理SSL證書,讓程序主動忽略SSL證書驗證錯誤,即可正常訪問。例如我們訪問12306。

 1 from urllib import request
 2 #導入python的SSL處理模塊
 3 import ssl
4 5 #忽略SSL驗證失敗 6 context=ssl._create_unverified_context() 7 8 url="https://www.12306.cn/mormhweb/" 9 10 response=request.urlopen(url,context=context) 11 html=response.read() 12 print(html)

    

二、Handler處理器以及自定義opener

    我們之前一直使用的urlopen,它是一個模塊幫我們構建好的特殊的opener。但是這個基本的urlopen()是不支持代理、cookie等其他的HTTP/HTTPS高級功能。所以我們需要利用Handler處理器自定義opener,來滿足我們需要的這些功能。

 1 import urllib.request
 2 
 3 url="http://www.whatismyip.com.tw/"
 4 
 5 #該參數是一個字典類型,鍵表示代理的類型,值為代理IP和端口號
 6 proxy_support=urllib.request.ProxyHandler({http:117.86.199.19:8118})
 7 
 8 #接著創建一個包含代理的opener
 9 opener=urllib.request.build_opener(proxy_support)
10 opener.addheaders=[("User-Agent","Mozilla/5.0(Macintosh;U;IntelMacOSX10_6_8;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50
")] 11 12 13 #第一種方式是使用install_opener()安裝進默認環境,那麽以後你使用urlopen()函數,它都是以你定制的opener工作的 14 urllib.request.install_opener(opener) 15 response=urllib.request.urlopen(url) 16 17 #第二種使用一次性的opener.open()打開 18 #req=urllib.request.Request(url) 19 #response=opener.open(req) 20 21 html=response.read().decode(utf-8) 22 print(html)

技術分享圖片

技術分享圖片

    我們可以看到,訪問網站的IP已經被換成了代理IP。在以上的設置代理的過程中,我們也使用addheaders這一函數,給請求附加了UserAgent,UserAgent中文名為用戶代理,是Http協議中的一部分,屬於頭域的組成部分,UserAgent也簡稱UA。它是一個特殊字符串頭,是一種向訪問網站提供你所使用的瀏覽器類型及版本、操作系統及版本、瀏覽器內核、等信息的標識。這也是對抗反爬蟲的常用手段之一。

python爬蟲(3)——SSL證書與Handler處理器