我們都知道在采集數(shù)據(jù)過程中,尤其是爬取大量數(shù)據(jù)的時候,很多網(wǎng)站都有反爬蟲措施,封 ip是很嚴重的,,讓你在采集的時候很心煩。本文就如何解決這個問題總結(jié)出一些應(yīng)對措施,這些措施可以單獨使用,也可以同時使用,效果更好。
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供西藏網(wǎng)站建設(shè)、西藏做網(wǎng)站、西藏網(wǎng)站設(shè)計、西藏網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、西藏企業(yè)網(wǎng)站模板建站服務(wù),10年西藏做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
一 、偽造 User-Agent
在請求頭中把 User-Agent 設(shè)置成瀏覽器中的 User-Agent ,來偽造瀏覽器訪問。比如:
headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}
resp = requests.get(url,headers = headers)
在每次重復爬取之間設(shè)置一個隨機時間間隔
# 比如:
time.sleep(random.randint(0,3)) # 暫停 0~3 秒的整數(shù)秒,時間區(qū)間: [0,3]
# 或:
time.sleep(random.random()) # 暫停 0~1 秒,時間區(qū)間: [0,1)
而且最主要的是 ua 要越多越好,不要固定的使用那幾個,要經(jīng)常更換最新真實的 ua 。
二、 偽造 cookies
若從瀏覽器中可以正常訪問一個頁面,則可以將瀏覽器中的 cookies 復制過來使用,比如:
cookies = dict(uuid='b18f0e70-8705-470d-bc4b-09a8da617e15',UM_distinctid='15d188be71d50-013c49b12ec14a-3f73035d-100200-15d188be71ffd')
resp = requests.get(url,cookies = cookies)
# 把瀏覽器的 cookies 字符串轉(zhuǎn)成字典
def cookies2dict(cookies):
items = cookies.split(';')
d = {}
for item in items:
kv = item.split('=',1)
k = kv[0]
v = kv[1]
d[k] = v
return d
注:用瀏覽器 cookies 發(fā)起請求后,如果請求頻率過于頻繁仍會被封 IP ,這時可以在瀏覽器上進行相應(yīng)的手工驗證(比如點擊驗證圖片等),然后就可以繼續(xù)正常使用該 cookies 發(fā)起請求。
三、 使用代理
可以換著用多個代理 IP 來進行訪問,防止同一個 IP 發(fā)起過多請求而被封 IP ,比如:
# 要訪問的目標頁面
targetUrl = "http://httpbin.org/ip"
# 要訪問的目標HTTPS頁面
# targetUrl = "https://httpbin.org/ip"
# 代理服務(wù)器
proxyHost = "t.16yun.cn"
proxyPort = "31111"
# 代理隧道驗證信息
proxyUser = "username"
proxyPass = "password"
proxyMeta = "http:// %(user)s : %(pass)s @ %(host)s : %(port)s " % {
"host" : proxyHost,
"port" : proxyPort,
"user" : proxyUser,
"pass" : proxyPass,
}
# 設(shè)置 http和https訪問都是用HTTP代理
proxies = {
"http" : proxyMeta,
"https" : proxyMeta,
} (這里是用的億牛云的動態(tài)轉(zhuǎn)發(fā)代理進行示例)
不管我們采集什么網(wǎng)站的數(shù)據(jù),光有代理是不行的,要配合多種反爬策略一起才能更高效的獲取大量的數(shù)據(jù)。