アンチ爬虫方式
2091 ワード
一、User-Agent
一部のサイトではUser-Agentヘッダで爬虫類を識別していますが、これは一般的なブラウザのUser-Agentヘッダを直接追加すればいいです.
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
二、代理プール
ほとんどのサイトはIPのリクエスト頻度を検出することで爬虫類を防止していますが、このときはエージェントによるリクエストが必要で、無料のエージェントIPサイトをいくつかお勧めします. 66ip http://www.66ip.cn/ ハッピーiphttp://www.kxdaili.com/ ファストエージェントhttp://www.kuaidaili.com/
もちろん実際にはほとんど使えないので、IPが利用可能かどうかを確認するために爬虫類を書くのが一般的です.githubにはオープンソースのプロジェクトがあります.
https://github.com/qiyeboy/IPProxyPoolIPProxysエージェントプールプロジェクトは、エージェントipを提供します.python 2を使用する.7.x開発
安定したプロジェクトは有料のエージェント、例えばアブクラウドエージェント(https://www.abuyun.com/)プロキシプールの使用方法を簡単なプログラムで説明します.
三、複数回の要求
爬虫類の同時発生量が高すぎると、1回の爬虫が成功しない可能性があります.この場合、requestsのadaptersモジュールはこの目的を達成するために何度も要求する必要があります.
四、ADSL動的IP
IPを買うお金がない学生には、ADSLダイヤルでIPを切り替えることができます.もちろん、あなたが使っているネットワークがこの機能をサポートしていることを前提にしています.一般的なキャンパスネットワークがサポートしているPPPOEプロトコルでいいです.一定時間おきに番号をダイヤルすると、新しいIPが割り当てられるのが原理です.Windowsのrasdialコマンドでは、次の操作を実行できます.
プログラムで使用するのはこうです.
一部のサイトではUser-Agentヘッダで爬虫類を識別していますが、これは一般的なブラウザのUser-Agentヘッダを直接追加すればいいです.
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
二、代理プール
ほとんどのサイトはIPのリクエスト頻度を検出することで爬虫類を防止していますが、このときはエージェントによるリクエストが必要で、無料のエージェントIPサイトをいくつかお勧めします.
もちろん実際にはほとんど使えないので、IPが利用可能かどうかを確認するために爬虫類を書くのが一般的です.githubにはオープンソースのプロジェクトがあります.
https://github.com/qiyeboy/IPProxyPoolIPProxysエージェントプールプロジェクトは、エージェントipを提供します.python 2を使用する.7.x開発
安定したプロジェクトは有料のエージェント、例えばアブクラウドエージェント(https://www.abuyun.com/)プロキシプールの使用方法を簡単なプログラムで説明します.
import requests
import gevent
from gevent import monkey
monkey.patch_socket()
# ip
ips = ['ip1:80','ip2:80','ip3:80','ip4:80','ip5:80','ip6:80','ip7:80','ip8:80','ip9:80','ip10:80']
def worker(i):
for j in range(i*10,i*10+10):
body = requests.get("http://www.example.com/%d.html" % j, proxies={'http':ips[i]}).text
# ip
tasks = [gevent.spawn(worker, i) for i in range(len(ips))]
gevent.joinall(tasks)
三、複数回の要求
爬虫類の同時発生量が高すぎると、1回の爬虫が成功しない可能性があります.この場合、requestsのadaptersモジュールはこの目的を達成するために何度も要求する必要があります.
from requests.adapters import HTTPAdapter
s = requests.Session()
s.mount('http://', HTTPAdapter(max_retries=3))
body = s.get("http://www.baidu.com").text
四、ADSL動的IP
IPを買うお金がない学生には、ADSLダイヤルでIPを切り替えることができます.もちろん、あなたが使っているネットワークがこの機能をサポートしていることを前提にしています.一般的なキャンパスネットワークがサポートしているPPPOEプロトコルでいいです.一定時間おきに番号をダイヤルすると、新しいIPが割り当てられるのが原理です.Windowsのrasdialコマンドでは、次の操作を実行できます.
rasdial /DISCONNECT //
rasdial user passwd //
プログラムで使用するのはこうです.
import requests
import os
requests.get("http://www.example1.com")
os.system("rasdial /DISCONNECT")
os.system("rasdial user passwd")
requests.get("http://www.example2.com")