Scrapy 크롤러에서 프록시 IP 및 크롤러 방지 전략 사용
최근 몇 년 동안 인터넷이 발전함에 따라 크롤러를 통해 획득해야 하는 데이터가 점점 더 많아지고 크롤러에 대한 크롤러 방지 전략이 더욱 엄격해졌습니다. . 많은 시나리오에서 프록시 IP와 크롤러 방지 전략을 사용하는 것은 크롤러 개발자에게 필수적인 기술이 되었습니다. 이 기사에서는 Scrapy 크롤러에서 프록시 IP 및 크롤링 방지 전략을 사용하여 데이터 크롤링의 안정성과 성공률을 보장하는 방법에 대해 설명합니다.
1. 프록시 IP를 사용해야 하는 이유
크롤러가 동일한 웹 사이트를 방문하면 동일한 IP 주소로 식별되는 경우가 많아 쉽게 차단되거나 제한될 수 있습니다. 이를 방지하려면 프록시 IP를 사용하여 실제 IP 주소를 숨겨 크롤러의 신원을 더 잘 보호해야 합니다.
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
이는 설정에서 설정해야 합니다. py 파일 프록시 IP 목록 경로:
PROXY_LIST_PATH = 'path/to/your/proxy/list'
크롤링을 실행할 때 Scrapy는 액세스할 프록시 IP를 무작위로 선택하여 신원을 숨기고 크롤링 성공률을 보장합니다.
3. 크롤러 방지 전략 정보
현재 웹사이트에 대한 크롤러 방지 전략은 간단한 사용자 에이전트 판단부터 보다 복잡한 확인 코드 및 슬라이딩 바 확인에 이르기까지 매우 일반적입니다. 아래에서는 Scrapy 크롤러에서 몇 가지 일반적인 크롤링 방지 전략을 처리하는 방법에 대해 설명합니다.
크롤러 액세스를 방지하기 위해 웹사이트에서는 User-Agent 필드가 브라우저의 방식이 아닌 경우 가로채는 경우가 많습니다. 따라서 User-Agent가 크롤러로 인식되지 않도록 Scrapy 크롤러에서 임의의 User-Agent를 설정해야 합니다.
middlewares.py에서 무작위 User-Agent 기능을 구현하기 위해 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 목록을 설정합니다:
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 주소로부터의 요청에 대한 접근을 제한하거나 금지할 수 있습니다. 이러한 상황에서는 프록시 IP를 사용하여 IP 주소를 무작위로 전환함으로써 IP 안티 크롤러를 피할 수 있습니다.
웹사이트에서는 쿠키 및 세션 등을 설정하여 요청의 신원을 식별할 수 있습니다. 이러한 방법은 종종 계정에 바인딩되며 각 계정에 대한 요청 빈도도 제한됩니다. 따라서 불법 요청으로 식별되지 않도록 Scrapy 크롤러에서 쿠키 및 세션을 시뮬레이션해야 합니다.
Scrapy의 settings.py 파일에서 다음을 구성할 수 있습니다.
COOKIES_ENABLED = True COOKIES_DEBUG = True
동시에 middlewares.py 파일에 CookieMiddleware 클래스를 정의하여 쿠키 기능을 시뮬레이션합니다.
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', ... }
요청이 전송되기 전에 요청의 쿠키 필드에 쿠키를 추가해야 합니다. 요청에 쿠키가 포함되어 있지 않으면 웹사이트에서 불법적인 요청으로 식별될 가능성이 높습니다.
IV.요약
위는 Scrapy 크롤러의 프록시 IP 사용 및 크롤러 방지 전략에 대한 소개입니다. 프록시 IP 및 크롤러 방지 전략을 사용하는 것은 크롤러가 제한되고 금지되는 것을 방지하는 중요한 수단입니다. 물론 크롤러 방지 전략은 끝없이 등장하고 이에 따라 다양한 크롤러 방지 전략도 처리해야 합니다.
위 내용은 Scrapy 크롤러에서 프록시 IP 및 크롤링 방지 전략 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!