크롤링 프로세스 중에 Scrapy는 어떻게 자동으로 로그인하나요?
웹사이트 데이터를 크롤링할 때 일부 웹사이트에서는 특정 페이지를 탐색하거나 더 많은 데이터를 얻기 위해 사용자 로그인 인증이 필요합니다. 동시에 로그인 후에만 얻을 수 있는 일부 데이터의 경우 크롤러 엔지니어는 크롤러 데이터를 수집하기 위해 웹 사이트 로그인을 시뮬레이션하기 위해 자동화된 작업을 사용하는 경우가 많습니다. 이 글에서는 Scrapy에서 자동 로그인 기능을 구현하는 방법을 자세히 설명합니다.
새 스파이더를 만들고 이름을 "login_spider"로 지정하세요. 이 스파이더의 목적은 시뮬레이션된 로그인 작업을 완료하는 것, 즉 크롤러가 시작되기 전에 사용자 로그인 작업을 완료하는 것입니다.
로그인 페이지에서 양식을 찾아 양식의 HTML 코드를 확인하세요.
"사용자 이름", "비밀번호" 등 입력해야 하는 필드(이름 속성)를 찾아 복사하세요.
Selector 메서드를 사용하여 이러한 필드에 해당하는 입력 태그를 찾고 extract() 메서드를 사용하여 해당 값을 얻은 다음 해당 키 값에 할당합니다.
def parse(self,response): return scrapy.FormRequest.from_response( response, formdata={'username': 'your_username', 'password': 'your_password'}, callback=self.start_scraping )
여기서 로그인 콜백 함수가 하는 일은 로그인 토큰이 포함된 응답에서 쿠키 값을 가져오고 새 요청 객체를 구성한 후 쿠키(헤더)를 전달하는 것입니다. 후속 비즈니스 스파이더에게 제공되는 가치입니다.
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} )
스파이더에 로그인한 후 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} )
쿠키 정보를 사용하여 로그인 후 실제 대상 페이지에 접속하세요. 비즈니스 스파이더의 사용자 정의에서 쿠키 정보를 얻어야 하는 모든 관련 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!