ホームページ >バックエンド開発 >Python チュートリアル >Scrapy クローラーでのプロキシ IP とクロール防止戦略の使用

Scrapy クローラーでのプロキシ IP とクロール防止戦略の使用

PHPz
PHPzオリジナル
2023-06-23 11:24:292061ブラウズ

Scrapy クローラでのプロキシ IP とクローラ対策戦略の使用

近年、インターネットの発展に伴い、クローラを介して取得するデータがますます増えており、クローラに対するクローラ対策戦略も必要となってきています。ますます重要になり、ますます厳しくなります。多くのシナリオにおいて、プロキシ IP の使用とクローラ対策戦略は、クローラ開発者にとって必須のスキルとなっています。この記事では、Scrapy クローラーでプロキシ IP とクロール防止戦略を使用して、クロール データの安定性と成功率を確保する方法について説明します。

1. プロキシ IP を使用する必要がある理由

クローラーが同じ Web サイトにアクセスすると、多くの場合、同じ IP アドレスとして識別され、簡単にブロックまたは制限される可能性があります。これを防ぐには、プロキシ IP を使用して実際の IP アドレスを隠す必要があり、これによりクローラーの ID がより適切に保護されます。

2. プロキシ IP の使用方法

Scrapy でプロキシ IP を使用するには、settings.py ファイルで Downloader_MIDDLEWARES 属性を設定します。

  1. 次のコードを settings.py ファイルに追加します。
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
    'your_project.middlewares.RandomUserAgentMiddleware': 400,
    'your_project.middlewares.RandomProxyMiddleware': 410,
}
  1. middlewares.py ファイルに RandomProxyMiddleware クラスを定義して、ランダム プロキシ IP 関数を実装します。 :
  2. import requests
    import random
    
    
    class RandomProxyMiddleware(object):
        def __init__(self, proxy_list_path):
            with open(proxy_list_path, 'r') as f:
                self.proxy_list = f.readlines()
    
        @classmethod
        def from_crawler(cls, crawler):
            settings = crawler.settings
            return cls(settings.get('PROXY_LIST_PATH'))
    
        def process_request(self, request, spider):
            proxy = random.choice(self.proxy_list).strip()
            request.meta['proxy'] = "http://" + proxy
その中で、プロキシ IP リストへのパスを settings.py ファイルに設定する必要があります:

PROXY_LIST_PATH = 'path/to/your/proxy/list'

クロールするとき、Scrapy はプロキシ IP をランダムに選択します。これにより、身元の隠蔽とクローリングの成功率が保証されます。

3. クローラー対策戦略について

現在、Web サイトのクローラー対策戦略は、単純なユーザー エージェントの判断から、より複雑な検証コードやスライディング バー検証に至るまで、非常に一般的です。以下では、Scrapy クローラーにおけるいくつかの一般的なクローリング防止戦略に対処する方法について説明します。

    ユーザー エージェント アンチ クローラー
クローラー アクセスを防ぐために、Web サイトではユーザー エージェント フィールドが決定されることがよくあります。ユーザー エージェントがブラウザーのメソッドではない場合は、 、インターセプトします。したがって、User-Agent がクローラとして認識されるのを避けるために、Scrapy クローラにランダムな User-Agent を設定する必要があります。

middlewares.py で、ランダム ユーザー エージェント機能を実装する RandomUserAgentMiddleware クラスを定義します。

import random
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware


class RandomUserAgentMiddleware(UserAgentMiddleware):
    def __init__(self, user_agent):
        self.user_agent = user_agent

    @classmethod
    def from_crawler(cls, crawler):
        s = cls(crawler.settings.get('user_agent', 'Scrapy'))
        crawler.signals.connect(s.spider_closed, signal=signals.spider_closed)
        return s

    def process_request(self, request, spider):
        ua = random.choice(self.user_agent_list)
        if ua:
            request.headers.setdefault('User-Agent', ua)

同時に、settings.py ファイルにユーザー エージェント リストを設定します。

USER_AGENT_LIST = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36']

    IP アンチ クローラー
同じ IP アドレスからの大量のリクエストを防ぐために、Web サイトは同じ IP アドレスからのリクエストへのアクセスを制限または禁止する場合があります。 IPアドレス。この状況では、プロキシ IP を使用して、IP アドレスをランダムに切り替えることで IP アンチクローラーを回避できます。

    Cookie とセッション アンチクローラー
Web サイトは、Cookie やセッションなどを設定することによってリクエストの ID を識別する場合があります。これらのメソッドは多くの場合、アカウントにバインドされています。アカウントごとのリクエストの頻度は制限されます。したがって、不正なリクエストとして識別されるのを避けるために、Scrapy クローラーで Cookie とセッションをシミュレートする必要があります。

Scrapy の settings.py ファイルでは、以下を構成できます:

COOKIES_ENABLED = True
COOKIES_DEBUG = True

同時に、middlewares.py ファイルで CookieMiddleware クラスを定義して、Cookie 関数をシミュレートします:

from scrapy.exceptions import IgnoreRequest


class CookieMiddleware(object):
    def __init__(self, cookies):
        self.cookies = cookies

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            cookies=crawler.settings.getdict('COOKIES')
        )

    def process_request(self, request, spider):
        request.cookies.update(self.cookies)

このうち、COOKIES の設定は次のとおりです。

COOKIES = {
    'cookie1': 'value1',
    'cookie2': 'value2',
    ...
}

Cookie は、リクエストを送信する前にリクエストの cookie フィールドに追加する必要があります。リクエストに Cookie が含まれていない場合、Web サイトによって違法なリクエストとして識別される可能性があります。

4. 概要

上記は、Scrapy クローラーでのプロキシ IP とクローラー対策戦略の使用についての紹介です。プロキシ IP とクローラー対策戦略の使用は、クローラーを防ぐ重要な手段です。制限されたり禁止されたりしないように。もちろん、クローラ対策戦略は際限なく出現するため、それに応じてさまざまなクローラ対策戦略に対処する必要があります。

以上がScrapy クローラーでのプロキシ IP とクロール防止戦略の使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。