新しい反爬虫類の考え方


概要
爬虫類の這い出し速度が速すぎたり、這い出し続けたりするサイト(一般的には大きなプラットフォームや個別の敏感なサイト)に直面すると、爬虫類が閉鎖される可能性が高い.捜索犬の微信にとって、これは個人が実際に直面している問題であり、最終的には一つの方法でこの問題を解決した.
検索犬の微信の反爬虫類は主に検証コードで、アクセス時間が速すぎると、ブラウザで更新をクリックしても、あなたは閉鎖されます.しかし、捜索犬の微信には爬虫類を封鎖する2つのメカニズムがある.
第一に、クッキーを閉じて、ブラウザが閉じられた後、ブラウザクッキーを空にするだけで正常にアクセスできます.
第二に、IPを封印して、この时全体のローカルエリアネットワークの人はすべて封印されます.これは、クッキーを閉じた後もページを要求し続けているからです.
ソリューション
上記の2つの封鎖問題に対して明らかなのは、クッキーが閉鎖されさえすれば、私たちはすぐに爬虫類を停止したり、新しいクッキーに交換したりして、直接問題を解決することです.2つ目のブラックアウトは発生しません.
最初のブラックアウトに直面して、私たちの解決策は以下の通りです.私たちはデータベースにクッキープールを構築することができます.中にクッキーを追加し続けることができます.もちろん、このクッキーを取得する登り速度は遅く、遅くすることができます.爬虫類では、与えられたクッキーが封印されると、データベースからクッキーを取り出して爬虫類を続けます.
本爬虫類はscrapy爬虫類を用いており,他の爬虫類やフレームワークの原理は同じである.
コアコードは次のとおりです.
class SpiderSpider(Spider.spider):
    name = "spider"
    allowed_domains = ["weixin.sogou.com"]


    def __init__(self):
        AllSpider.__init__(self)
        #      Cookiejar  ,    cookiejar  。
        self.cookie_jar = CookieJar()
        #       cookie,        ,             。
        self.cookies = self.read_cookies()

    def read_cookies(self):
        Cookie = "SUID=34E5477D3220910A000000005B03C5B6; SUV=1526973879119417; LSTMV=238%2C304; LCLKINT=3091; sw_uuid=7254428489; weixinIndexVisited=1; CXID=38DEFD16444E743522E55C84A381BB20; ad=0kllllllll2bV6dAlllllVHVucUlllllKUKO2lllllyllllljZlll5@@@@@@@@@@; ABTEST=0|1531363605|v1; SUIR=8751F4CEB4B6DD84769A90F2B41B49FA; IPLOC=CN5101; JSESSIONID=aaaZq720YIbLH9UpL8Gsw; sct=35; PHPSESSID=qm5jharb5hcqlenc14755gsf95; SNUID=FA3795AFD2D6A3EFFC556385D3C48438; seccodeRight=success; successCount=1|Wed, 18 Jul 2018 02:59:49 GMT; refresh=1"
        mycookie = {}
        for cookiekv in Cookie.split(";"):
            names, values = cookiekv.split("=", 1)
            mycookie[names] = values
        return mycookie

    def start_request(self, response):
        #              
        #         req_url
        #               parse,         ,        cookie  
        time.sleep(random.randint(2,8))
        #      cookiejar      ,             。          cookie。
        yield scrapy.Request(req_url, callback=self.parse1,meta={"cookiejar":self.cookie_jar,"redirct_url":req_url},cookies=self.cookies ,dont_filter=True,method='get')

    def parse1(self,response):
        #                ,         cookie     ,         cookie  
        Cookie:        cookie
        if response.status == 302:
            time.sleep(random.randint(2, 8))
            yield scrapy.Request(response.meta['redirct_url'], callback=self.parse1,meta={"cookiejar": self.cookie_jar, "originalUrl": response.meta['originalUrl']}, cookies=Cookie,dont_filter=True, method='get')
        else:
            pass
        #                    
        query = re.findall('&query=(.*?)&',response.url)[0]
        url = "http://weixin.sogou.com/weixin?type=2&ie=utf8&query={}&tsn=1&ft=&et=&interation=&wxid=&usip=&page=1".format(query)
        time.sleep(random.randint(2, 8))
        yield scrapy.Request(url,meta={'cookiejar': response.meta['cookiejar'], callback=self.parse3,dont_filter=True)

    def parse3(self,response):
                

説明:scrapyでは、cookieJarは自分でcookieを維持できるので、一般的にはアクセスがあまり頻繁でない限り、問題はありません.なぜなら、毎回のリクエストに応答クッキーが得られるため、scrapyはこの応答クッキーとリクエストのクッキーを共に維持し、最終的にこのクッキーが何度もリクエストされると、多くのパラメータが最初のクッキーとは大きく異なるからです.
第2中封ipの問題を解決します.ローカルエリアネットワーク内の任意のマシンに認証コードを入力するだけで解封され、上記の最初の考え方を繰り返して虫登りを続けることができます.
まとめ
個人的な経験を通じて、実は爬虫類の最大の焦点はクッキーにあると思います.私たちが正しい有効なクッキーを持っていれば、ずっと(正常に)訪問することができます.封クッキー、封ip、ブラウザチェックメカニズムなど、クッキーの場所から着手することができます.検証コード、エージェントipの観点から考える必要はありません.ただ、ログインが必要なサイトでクッキーを取得すると認証コードが入力される可能性があるので、認証コード処理をしなければなりません.また、ipを深刻に閉鎖しているサイトもあります.ipにしばらくアクセスできないかもしれません.これは、エージェントipを取得する手段が必要です.