>  기사  >  백엔드 개발  >  Scrapy의 힘: 인증 코드를 인식하고 처리하는 방법은 무엇입니까?

Scrapy의 힘: 인증 코드를 인식하고 처리하는 방법은 무엇입니까?

王林
王林원래의
2023-06-22 15:09:121735검색

Scrapy는 웹사이트의 데이터를 쉽게 크롤링하는 데 도움이 되는 강력한 Python 프레임워크입니다. 하지만 크롤링하려는 웹사이트에 인증 코드가 있으면 문제가 발생합니다. CAPTCHA의 목적은 자동화된 크롤러가 웹사이트를 공격하는 것을 방지하는 것이므로 매우 복잡하고 해독하기 어려운 경향이 있습니다. 이 게시물에서는 크롤러가 이러한 방어를 우회할 수 있도록 Scrapy 프레임워크를 사용하여 CAPTCHA를 식별하고 처리하는 방법을 다룹니다.

인증코드란 무엇인가요?

A CAPTCHA는 사용자가 기계가 아닌 실제 인간임을 증명하는 데 사용되는 테스트입니다. 일반적으로 사용자가 표시되는 내용을 수동으로 입력하거나 선택해야 하는 난독화된 텍스트 문자열이거나 해독할 수 없는 이미지입니다. CAPTCHA는 자동화된 봇과 스크립트를 포착하여 악의적인 공격과 남용으로부터 웹사이트를 보호하도록 설계되었습니다.

일반적으로 세 가지 유형의 보안 문자가 있습니다:

  1. 텍스트 보안 문자: 사용자는 자신이 봇이 아닌 인간 사용자임을 증명하기 위해 텍스트 문자열을 복사하여 붙여 넣어야 합니다.
  2. 번호 인증코드: 사용자는 입력창에 표시된 숫자를 입력해야 합니다.
  3. 이미지 확인 코드: 사용자는 표시된 이미지의 문자나 숫자를 입력 상자에 입력하라는 요청을 받습니다. 이는 이미지의 문자나 숫자가 왜곡되거나 위치가 잘못되거나 시각적으로 왜곡될 수 있기 때문에 일반적으로 해독하기 가장 어려운 유형입니다. 소음. .

인증 코드를 처리해야 하는 이유는 무엇인가요?

크롤러는 대규모로 자동화되는 경우가 많기 때문에 로봇으로 쉽게 식별될 수 있으며 웹사이트에서 데이터를 얻는 것이 금지될 수 있습니다. 이러한 일이 발생하는 것을 방지하기 위해 CAPTCHA가 도입되었습니다. ep가 확인 코드 단계에 들어가면 Scrapy 크롤러는 사용자 입력 대기를 중단하므로 데이터 크롤링을 계속할 수 없으므로 크롤러의 효율성과 무결성이 저하됩니다.

따라서 크롤러가 자동으로 보안 문자를 전달하고 작업을 계속할 수 있도록 보안 문자를 처리할 방법이 필요합니다. 일반적으로 당사는 인증 코드 인식을 완료하기 위해 타사 도구나 API를 사용합니다. 이러한 도구와 API는 기계 학습 및 이미지 처리 알고리즘을 사용하여 이미지와 문자를 인식하고 결과를 당사 프로그램에 반환합니다.

Scrapy에서 인증 코드를 처리하는 방법은 무엇인가요? scrapy의 settings.py 파일을 OPENENE, Downloder_MiddleWares 필드를 수정하고 다음 프록시를 추가해야합니다. ': 350,'scrapy.contrib.downloadermiddleware.redirect.RedirectMiddleware': 400,

'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware': 700,'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 750,

'scrapy .contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400,'scrapy.contrib.downloadermiddleware.defaultheaders.DefaultHeadersMiddleware': 550,

'scrapy.contrib.downloadermiddleware.ajaxcrawl.AjaxCrawlMiddleware': 900,'scrapy.contrib.download ermiddleware. .HttpCompressionMiddleware': 800,

'scrapy.contrib.downloadermiddleware.chunked.ChunkedTransferMiddleware': 830,'scrapy.contrib.downloadermiddleware.stats.DownloaderStats': 850,
'tutorial.middlewares.CaptchaMiddleware': 999}

In In 이 예에서는 CaptchaMiddleware를 사용하여 확인 코드를 처리합니다. CaptchMiddleware는 다운로드 요청을 처리하고 필요할 때 확인 코드를 식별하기 위해 API를 호출한 다음 요청에 확인 코드를 입력하고 반환하여 실행을 계속하는 사용자 정의 미들웨어 클래스입니다.

코드 예:

class CaptchaMiddleware(object):

def __init__(self):
    self.client = CaptchaClient()
    self.max_attempts = 5

def process_request(self, request, spider):
    # 如果没有设置dont_filter则默认开启
    if not request.meta.get('dont_filter', False):
        request.meta['dont_filter'] = True

    if 'captcha' in request.meta:
        # 带有验证码信息
        captcha = request.meta['captcha']
        request.meta.pop('captcha')
    else:
        # 没有验证码则获取
        captcha = self.get_captcha(request.url, logger=spider.logger)

    if captcha:
        # 如果有验证码则添加到请求头
        request = request.replace(
            headers={
                'Captcha-Code': captcha,
                'Captcha-Type': 'math',
            }
        )
        spider.logger.debug(f'has captcha: {captcha}')

    return request

def process_response(self, request, response, spider):
    # 如果没有验证码或者验证码失败则不重试
    need_retry = 'Captcha-Code' in request.headers.keys()
    if not need_retry:
        return response

    # 如果已经尝试过,则不再重试
    retry_times = request.meta.get('retry_times', 0)
    if retry_times >= self.max_attempts:
        return response

    # 验证码校验失败则重试
    result = self.client.check(request.url, request.headers['Captcha-Code'])
    if not result:
        spider.logger.warning(f'Captcha check fail: {request.url}')
        return request.replace(
            meta={
                'captcha': self.get_captcha(request.url, logger=spider.logger),
                'retry_times': retry_times + 1,
            },
            dont_filter=True,
        )

    # 验证码校验成功则继续执行
    spider.logger.debug(f'Captcha check success: {request.url}')
    return response

def get_captcha(self, url, logger=None):
    captcha = self.client.solve(url)
    if captcha:
        if logger:
            logger.debug(f'get captcha [0:4]: {captcha[0:4]}')
        return captcha

    return None

이 미들웨어에서는 CaptchaClient 개체를 보안문자 솔루션 미들웨어로 사용했으며, 여러 보안문자 솔루션 미들웨어를 사용할 수 있습니다.

주의사항

이 미들웨어를 구현할 때 다음 사항에 주의하세요.

인증 코드를 식별하고 처리하려면 타사 도구나 API를 사용해야 하며, 법적 라이센스가 있는지 확인해야 합니다. 제조업체의 요구 사항을 따르십시오.

미들웨어를 추가한 후에는 요청 프로세스가 더욱 복잡해지며 개발자는 프로그램이 제대로 작동할 수 있는지 확인하기 위해 신중하게 테스트하고 디버그해야 합니다.

  1. 결론
  2. 인증코드 인식 및 처리를 위한 Scrapy 프레임워크와 미들웨어를 사용하면 인증코드 방어 전략을 효과적으로 우회하고 대상 웹사이트의 효과적인 크롤링을 달성할 수 있습니다. 이 방법은 일반적으로 인증 코드를 수동으로 입력하는 것보다 시간과 노력을 절약하며 더 효율적이고 정확합니다. 그러나 타사 도구 및 API를 사용하기 전에 라이선스 계약과 요구 사항을 읽고 준수하는 것이 중요합니다.

위 내용은 Scrapy의 힘: 인증 코드를 인식하고 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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