$python爬蟲防止IP被封的一些措施


在編寫爬蟲爬取數據的時候,尤其是爬取大量數據的時候,因為很多網站都有反爬蟲措施,所以很容易被封IP,就不能繼續爬了。本文就如何解決這個問題總結出一些應對措施,這些措施可以單獨使用,也可以同時使用,效果更好。

偽造User-Agent

在請求頭中把User-Agent設置成瀏覽器中的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)

在每次重復爬取之間設置一個隨機時間間隔

# 比如:
time.sleep(random.randint(0,3))  # 暫停0~3秒的整數秒,時間區間:[0,3]
# 或:
time.sleep(random.random())  # 暫停0~1秒,時間區間:[0,1)

偽造cookies

若從瀏覽器中可以正常訪問一個頁面,則可以將瀏覽器中的cookies復制過來使用,比如:

cookies = dict(uuid='b18f0e70-8705-470d-bc4b-09a8da617e15',UM_distinctid='15d188be71d50-013c49b12ec14a-3f73035d-100200-15d188be71ffd')
resp = requests.get(url,cookies = cookies)
# 把瀏覽器的cookies字符串轉成字典
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發起請求后,如果請求頻率過於頻繁仍會被封IP,這時可以在瀏覽器上進行相應的手工驗證(比如點擊驗證圖片等),然后就可以繼續正常使用該cookies發起請求。

使用代理

可以換着用多個代理IP來進行訪問,防止同一個IP發起過多請求而被封IP,比如:

proxies = {'http':'http://10.10.10.10:8765','https':'https://10.10.10.10:8765'}
resp = requests.get(url,proxies = proxies)
# 注:免費的代理IP可以在這個網站上獲取:http://www.xicidaili.com/nn/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM