首頁 >後端開發 >Python教學 >Python爬蟲如何設定代理

Python爬蟲如何設定代理

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-06-13 16:58:306995瀏覽

有些網站會有相應的反爬蟲措施,例如許多網站會偵測某一段時間某個IP的造訪次數,如果造訪頻率太快以至於看起來不像正常訪客,它可能就會禁止這個IP的訪問。所以我們需要設定一些代理伺服器,每隔一段時間換一個代理,就算IP被禁止,依然可以換個IP繼續爬取。

Python爬蟲如何設定代理

在Python中,可以使用urllib2中的ProxyHandler來設定使用代理伺服器,下面透過程式碼說明如何來使用代理:

import urllib2
# 构建了两个代理Handler,一个有代理IP,一个没有代理IP
httpproxy_handler = urllib2.ProxyHandler({"http" : "124.88.67.81:80"})
nullproxy_handler = urllib2.ProxyHandler({})
#定义一个代理开关
proxySwitch = True 
# 通过 urllib2.build_opener()方法使用这些代理Handler对象,创建自定义opener对象
# 根据代理开关是否打开,使用不同的代理模式
if proxySwitch:  
    opener = urllib2.build_opener(httpproxy_handler)
else:
    opener = urllib2.build_opener(nullproxy_handler)
request = urllib2.Request("http://www.baidu.com/")
# 使用opener.open()方法发送请求才使用自定义的代理,而urlopen()则不使用自定义代理。
response = opener.open(request)
# 就是将opener应用到全局,之后所有的,不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。
# urllib2.install_opener(opener)
# response = urlopen(request)
print response.read()

上面使用的是免費的開放代理,我們可以在一些代理網站上收集這些免費代理,測試後如果可以用,就把它收集起來用在爬蟲上面。

相關推薦:《python影片教學

#免費代理網站:

##西刺免費代理

快代理免費代理

全國代理ip

如果你有足夠多的代理,可以放在一個清單中,隨機選擇一個代理去訪問網站。如下:

import urllib2
import random
proxy_list = [
    {"http" : "124.88.67.81:80"},
    {"http" : "124.88.67.81:80"},
    {"http" : "124.88.67.81:80"},
    {"http" : "124.88.67.81:80"},
    {"http" : "124.88.67.81:80"}
]
# 随机选择一个代理
proxy = random.choice(proxy_list)
# 使用选择的代理构建代理处理器对象
httpproxy_handler = urllib2.ProxyHandler(proxy)
opener = urllib2.build_opener(httpproxy_handler)
request = urllib2.Request("http://www.baidu.com/")
response = opener.open(request)
print response.read()

上面使用的都是免費代理,不是很穩定,很多時候會出現無法使用的情況,這時候可以考慮使用私密代理。也就是向代理供應商購買代理,供應商會提供一個有效代理,並且有自己的用戶名和密碼,具體使用和免費代理一樣,這是多了一個帳戶認證,如下:

# 构建具有一个私密代理IP的Handler,其中user为账户,passwd为密码
httpproxy_handler = urllib2.ProxyHandler({"http" : "user:passwd@124.88.67.81:80"})

上面就是使用urllib2設定代理的方法,不過看起來有些麻煩,下面我們來看看如何使用reqursts來使用代理。

使用免費代理:

import requests
# 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:
proxy = { "http": "mr_mao_hacker:sffqry9r@61.158.163.130:16816" }
response = requests.get("http://www.baidu.com", proxies = proxy)
print response.text

註:可以將帳戶密碼寫入環境變數以免洩漏

以上是Python爬蟲如何設定代理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn