Python3網絡爬蟲(3):使用User Agent和代理IP隱藏身份
Python版本: python3
IDE: pycharm2017.3.3
一、為何要設置User Agent
有一些網站不喜歡被爬蟲訪問,所以會檢測對象,如果是爬蟲程序,他就會不讓你訪問,通過設置User Agent來達到隱藏身份的目的,User Agent的中文名為用戶代理,簡稱UA
User Agent存放於Headers中,服務器就是通過查看Headers中的User Agent來判斷是誰在訪問。在python中如果不設置User Agent,程序將會私用默認的參數,那麽這個User Agent就會有Python字樣,防爬網站就會不讓你訪問
Python允許我們修改這個User Agent來模擬瀏覽器訪問
二、常見的User Agent
1.Android
- Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
- Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
- Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
2.Firefox
- Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
- Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0
3.Google Chrome
- Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
- Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19
4.iOS
- Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
- Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3
這些User Agent,直接copy就能用
三、設置User Agent的方法
方法一:
使用上面Android的第一個User Agent,創建request對象的時候傳入headers參數,代碼如下
1 from urllib import request 2 3 #以CSDN為例,CSDN不更改User Agent是無法訪問的 4 url = "http://www.csdn.net/" 5 head = {} 6 #寫入User Agent信息 7 head[‘User-Agent‘] = ‘Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19‘ 8 #創建Request對象 9 req = request.Request(url, headers=head) 10 #傳入創建好的Request對象 11 response = request.urlopen(req) 12 #讀取響應信息並解碼 13 html = response.read().decode(‘utf-8‘) 14 #打印信息 15 print(html)
結果如下
方法二:
使用上面Android的第一個User Agent,在創建Request對象時不傳入headers參數,創建之後使用add_header()方法,添加headers,代碼如下
from urllib import request url = ‘http://www.csdn.net/‘ #創建request對象 req = request.Request(url) #傳入headers req.add_header(‘User-Agent‘, ‘Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19‘) #傳入創建好的Request對象 response = request.urlopen(req) #讀取響應信息並解碼 html = response.read().decode(‘utf-8‘) print(html)
運行結果與上一個相同
四、IP代理的使用
1.為何使用IP代理
程序的運行速度是很快的,如果我們利用一個爬蟲程序在網站爬取東西,一個固定IP的訪問頻率就會很高,這不符合人為操作的標準,因為人操作不可能在幾毫秒內,進行如此頻繁的訪問。所以一些網站會設置一個IP訪問頻率的閾值,如果一個IP訪問超過這個閾值,說明這個不是人在訪問,而是一個爬蟲程序
2.步驟
(1)調用urllib.request.ProxyHandler(),proxies參數為一個字典
(2)創建Opener(類似於urlopen,這個代開方式使我們自己定制的)
(3)安裝Opener
3.代理IP選取
西刺代理IP從中選取一個 111.155.116.249
4.代碼如下
1 from urllib import request 2 3 if __name__ == "__main__": 4 #訪問網址 5 url = ‘http://www.whatismyip.com.tw/‘ 6 #這是代理IP 7 proxy = {‘http‘: ‘60.184.175.145‘} 8 #創建ProxyHandler 9 proxy_support = request.ProxyHandler(proxy) 10 #創建Opener 11 opener = request.build_opener(proxy_support) 12 #添加User Angent 13 opener.addheaders = [(‘User-Agent‘, ‘Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19‘)] 14 #安裝OPener 15 request.install_opener(opener) 16 #使用自己安裝好的Opener 17 response = request.urlopen(url) 18 #讀取相應信息並解碼 19 html = response.read().decode("utf-8") 20 #打印信息 21 print(html)
Python3網絡爬蟲(3):使用User Agent和代理IP隱藏身份