在寫爬蟲爬取資料的時候,尤其是爬取大量資料的時候,因為很多網站都有反爬蟲措施,所以很容易被封IP,就不能繼續爬了。本文就如何解決這個問題總結出一些因應措施,這些措施可以單獨使用,也可以同時使用,效果更好。
在請求頭中把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 = 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中文網其他相關文章!