1. 程式人生 > >Python3網絡爬蟲(3):使用User Agent和代理IP隱藏身份

Python3網絡爬蟲(3):使用User Agent和代理IP隱藏身份

pycharm info 3.1 port rm2 andro python uil blank

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隱藏身份