アンチ爬虫方式

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/)プロキシプールの使用方法を簡単なプログラムで説明します.
    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")