爬蟲為什麼要設定代理?
很多網站會檢測某一段時間某個IP的通路次數(通過流量統計,系統日志等),如果通路次數多的不像正常人,它會禁止這個IP的通路。是以我們可以設定一些代理伺服器,每隔一段時間換一個代理,就算IP被禁止,依然可以換個IP繼續爬取。
代理的原理:
在請求目的伺服器之前,先請求代理伺服器,然後讓代理伺服器去請求目的伺服器,代理伺服器從目的伺服器拿到資料後,轉發給我們的代碼
代碼中使用代理的步驟:
- 使用ProxyHandler傳入代理,建構一個handler
- 使用handler建構一個opener
- 使用open()發送請求
from urllib import request
import ssl
def main():
# 不使用代理
# 傳回通路的ip
url = 'http://httpbin.org/ip'
res = request.urlopen(url)
print("不使用代理傳回ip:\n", res.read().decode('utf-8'))
# 使用代理
# 1.使用ProxyHandler傳入代理,建構一個handler
handler = request.ProxyHandler({'http': "111.72.25.191:9999"})
# 2.使用handler建構一個opener
opener = request.build_opener(handler)
# 3.使用open()發送請求
res = opener.open(url)
print("使用代理傳回ip:\n",res.read().decode('utf-8'))
if __name__ == '__main__':
main()
常用的代理:
- 西刺代理 : http://www.xicidaili.com/
- 快代理:http://www.kuaidaili.com/
- 代理雲:http://www.dailiyun.com/