>백엔드 개발 >파이썬 튜토리얼 >Scrapy 크롤러에서 프록시 IP 및 크롤링 방지 전략 사용

Scrapy 크롤러에서 프록시 IP 및 크롤링 방지 전략 사용

PHPz
PHPz원래의
2023-06-23 11:24:292052검색

Scrapy 크롤러에서 프록시 IP 및 크롤러 방지 전략 사용

최근 몇 년 동안 인터넷이 발전함에 따라 크롤러를 통해 획득해야 하는 데이터가 점점 더 많아지고 크롤러에 대한 크롤러 방지 전략이 더욱 엄격해졌습니다. . 많은 시나리오에서 프록시 IP와 크롤러 방지 전략을 사용하는 것은 크롤러 개발자에게 필수적인 기술이 되었습니다. 이 기사에서는 Scrapy 크롤러에서 프록시 IP 및 크롤링 방지 전략을 사용하여 데이터 크롤링의 안정성과 성공률을 보장하는 방법에 대해 설명합니다.

1. 프록시 IP를 사용해야 하는 이유

크롤러가 동일한 웹 사이트를 방문하면 동일한 IP 주소로 식별되는 경우가 많아 쉽게 차단되거나 제한될 수 있습니다. 이를 방지하려면 프록시 IP를 사용하여 실제 IP 주소를 숨겨 크롤러의 신원을 더 잘 보호해야 합니다.

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 기능을 구현하세요:
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 크롤러에서 몇 가지 일반적인 크롤링 방지 전략을 처리하는 방법에 대해 설명합니다.

  1. User-Agent 안티 크롤러

크롤러 액세스를 방지하기 위해 웹사이트에서는 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']
  1. IP 안티 크롤러

동일한 IP 주소로부터의 다수의 요청을 방지하기 위해, 웹사이트에서는 동일한 IP 주소로부터의 요청에 대한 접근을 제한하거나 금지할 수 있습니다. 이러한 상황에서는 프록시 IP를 사용하여 IP 주소를 무작위로 전환함으로써 IP 안티 크롤러를 피할 수 있습니다.

  1. 쿠키 및 세션 안티 크롤러

웹사이트에서는 쿠키 및 세션 등을 설정하여 요청의 신원을 식별할 수 있습니다. 이러한 방법은 종종 계정에 바인딩되며 각 계정에 대한 요청 빈도도 제한됩니다. 따라서 불법 요청으로 식별되지 않도록 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.