>  기사  >  백엔드 개발  >  크롤링 프로세스 중에 Scrapy는 어떻게 자동으로 로그인합니까?

크롤링 프로세스 중에 Scrapy는 어떻게 자동으로 로그인합니까?

王林
王林원래의
2023-06-23 09:20:451209검색

크롤링 프로세스 중에 Scrapy는 어떻게 자동으로 로그인하나요?

웹사이트 데이터를 크롤링할 때 일부 웹사이트에서는 특정 페이지를 탐색하거나 더 많은 데이터를 얻기 위해 사용자 로그인 인증이 필요합니다. 동시에 로그인 후에만 얻을 수 있는 일부 데이터의 경우 크롤러 엔지니어는 크롤러 데이터를 수집하기 위해 웹 사이트 로그인을 시뮬레이션하기 위해 자동화된 작업을 사용하는 경우가 많습니다. 이 글에서는 Scrapy에서 자동 로그인 기능을 구현하는 방법을 자세히 설명합니다.

  1. 로그인 스파이더 만들기

새 스파이더를 만들고 이름을 "login_spider"로 지정하세요. 이 스파이더의 목적은 시뮬레이션된 로그인 작업을 완료하는 것, 즉 크롤러가 시작되기 전에 사용자 로그인 작업을 완료하는 것입니다.

  1. 로그인 양식 만들기

로그인 페이지에서 양식을 찾아 양식의 HTML 코드를 확인하세요.
"사용자 이름", "비밀번호" 등 입력해야 하는 필드(이름 속성)를 찾아 복사하세요.
Selector 메서드를 사용하여 이러한 필드에 해당하는 입력 태그를 찾고 extract() 메서드를 사용하여 해당 값을 얻은 다음 해당 키 값에 할당합니다.

    def parse(self,response):
        return scrapy.FormRequest.from_response(
            response,
            formdata={'username': 'your_username', 'password': 'your_password'},
            callback=self.start_scraping
        )
  1. 로그인 스파이더가 실행되기 시작할 때 콜백 함수 작성

여기서 로그인 콜백 함수가 하는 일은 로그인 토큰이 포함된 응답에서 쿠키 값을 가져오고 새 요청 객체를 구성한 후 쿠키(헤더)를 전달하는 것입니다. 후속 비즈니스 스파이더에게 제공되는 가치입니다.

    def start_scraping(self, response):
        # Get CSRF token
        token = response.css('input[name="csrf_token"]::attr(value)').extract_first()
        logging.info('CSRF token obtained: ' + token)

        # Create cookie dict
        cookie = response.headers.getlist('Set-Cookie')
        cookie = [str(c, 'utf-8') for c in cookie]
        cookie_dict = {
            str(c.split('; ')[0].split('=')[0]): str(c.split('; ')[0].split('=')[1])
            for c in cookie
        }

        # Store cookie dict in spider settings
        self.settings.set('COOKIE_DICT', cookie_dict, priority='cmdline')

        # Start scraping main website
        yield scrapy.Request(
            url='https://www.example.com/your/start/url/',
            callback=self.parse_homepage,
            headers={'Cookie': cookie}
        )
  1. 쿠키를 사용하여 사용자 정보로 요청 발행

스파이더에 로그인한 후 start_requests 메소드를 호출하여 첫 ​​번째 요청을 보냅니다. 설정에서 이전 단계에 저장된 cookie_dict 값을 가져와 headers 매개변수를 사용하여 크롤러에 전달합니다.

    def start_requests(self):
        cookie = self.settings.get('COOKIE_DICT')
        yield scrapy.Request(
            url='https://www.example.com/your/start/url/',
            callback=self.parse_homepage,
            headers={'Cookie': cookie},
            meta={'login': True}
        )
  1. 비즈니스 스파이더 만들기

쿠키 정보를 사용하여 로그인 후 실제 대상 페이지에 접속하세요. 비즈니스 스파이더의 사용자 정의에서 쿠키 정보를 얻어야 하는 모든 관련 URL은 쿠키 정보를 사용하여 액세스됩니다. 다음은 간단한 비즈니스 스파이더 코드입니다

    class MySpider(scrapy.Spider):
    name = 'myspider'

    def start_requests(self):
        yield scrapy.Request('https://www.example.com/real-target-url/', callback=self.parse, headers={'Cookie': self.settings.get('COOKIE_DICT')})

    def parse(self, response):
        # Do whatever you want with the authenticated response

위 단계를 통해 Scrapy 프레임워크를 사용하여 시뮬레이션된 로그인 기능을 구현할 수 있습니다. 쿠키 값을 전달함으로써 Scrapy는 로그아웃하지 않고도 로그인 확인이 필요한 데이터를 계속해서 캡처할 수 있습니다. 보안상의 문제가 있을 수 있지만 크롤러를 학습하거나 학문적 목적으로 연구를 수행할 때 이 솔루션이 가능합니다.

위 내용은 크롤링 프로세스 중에 Scrapy는 어떻게 자동으로 로그인합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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