データをクロールするクローラーを作成する場合、特に大量のデータをクロールする場合、多くの Web サイトにはクローラー対策が講じられているため、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 = 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
注: ブラウザの Cookie を使用してリクエストを開始した後でも、リクエストの頻度が高すぎる場合、IP は依然としてブロックされます。この時点で、次のことを実行できます。ブラウザ上で対応するアクションを実行し、手動で検証 (検証画像をクリックするなど) した後は、引き続き Cookie を使用して通常どおりリクエストを行うことができます。
アクセスに複数のプロキシ 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 中国語 Web サイトの他の関連記事を参照してください。