ホームページ >バックエンド開発 >Python チュートリアル >Scrapy クローラーでのプロキシ IP とクロール防止戦略の使用
Scrapy クローラでのプロキシ IP とクローラ対策戦略の使用
近年、インターネットの発展に伴い、クローラを介して取得するデータがますます増えており、クローラに対するクローラ対策戦略も必要となってきています。ますます重要になり、ますます厳しくなります。多くのシナリオにおいて、プロキシ IP の使用とクローラ対策戦略は、クローラ開発者にとって必須のスキルとなっています。この記事では、Scrapy クローラーでプロキシ IP とクロール防止戦略を使用して、クロール データの安定性と成功率を確保する方法について説明します。
1. プロキシ IP を使用する必要がある理由
クローラーが同じ Web サイトにアクセスすると、多くの場合、同じ IP アドレスとして識別され、簡単にブロックまたは制限される可能性があります。これを防ぐには、プロキシ IP を使用して実際の IP アドレスを隠す必要があり、これによりクローラーの ID がより適切に保護されます。
2. プロキシ IP の使用方法
Scrapy でプロキシ IP を使用するには、settings.py ファイルで Downloader_MIDDLEWARES 属性を設定します。
DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, 'your_project.middlewares.RandomUserAgentMiddleware': 400, 'your_project.middlewares.RandomProxyMiddleware': 410, }
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
PROXY_LIST_PATH = 'path/to/your/proxy/list'クロールするとき、Scrapy はプロキシ IP をランダムに選択します。これにより、身元の隠蔽とクローリングの成功率が保証されます。 3. クローラー対策戦略について現在、Web サイトのクローラー対策戦略は、単純なユーザー エージェントの判断から、より複雑な検証コードやスライディング バー検証に至るまで、非常に一般的です。以下では、Scrapy クローラーにおけるいくつかの一般的なクローリング防止戦略に対処する方法について説明します。
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']
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 サイトの他の関連記事を参照してください。