python爬蟲防止IP被封的方法

little bottle
發布: 2019-04-10 17:07:35
轉載
3042 人瀏覽過

在寫爬蟲爬取資料的時候,尤其是爬取大量資料的時候,因為很多網站都有反爬蟲措施,所以很容易被封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/
登入後複製

【推薦課程:Python影片教學

以上是python爬蟲防止IP被封的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!