2016-06-29 1 views
3

시작시 로그인 양식으로 인증하는 Scrapy 스파이더를 사용하고 있습니다. 그런 다음이 인증 된 세션을 스크랩합니다.Scrap 개발을위한 크롤링간에 인증 된 세션 유지

개발하는 동안 나는 보통 거미를 여러 번 실행하여 테스트합니다. 각 실행의 시작 부분에서 인증하는 것은 웹 사이트의 로그인 양식을 스팸합니다. 웹 사이트는 종종 응답을 위해 비밀번호 재설정을 강요 할 것이며이 경우 계정을 금지 할 것으로 판단됩니다.

쿠키가 몇 시간 동안 지속되므로 개발 중에 자주 로그인해야 할 이유가 없습니다. 암호 재설정 문제를 해결하려면 개발 중에 실행되는 세션간에 쿠키를 다시 사용하는 가장 좋은 방법은 무엇입니까? 이상적으로 스파이더는 지속 세션이 만료 된 경우에만 인증을 시도합니다.

편집 : 목록이있는 '쿠키'탭 아래

def start_requests(self): 
     yield scrapy.Request(self.base, callback=self.log_in) 

def log_in(self, response): 
     #response.headers includes 'Set-Cookie': 'JSESSIONID=xx'; Path=/cas/; Secure; HttpOnly' 
     yield scrapy.FormRequest.from_response(response, 
             formdata={'username': 'xxx', 
                'password':''}, 
              callback=self.logged_in) 
def logged_in(self, response): 
     #request.headers and subsequent requests all have headers fields 'Cookie': 'JSESSIONID=xxx'; 
     #response.headers has no mention of cookies 
     #request.cookies is empty 

내가 크롬에서 같은 페이지 요청을 실행

~ 20 필드 :

내 구조가 같다.

documentation은 여기가 얇게 보입니다. 성공적인 로그인에 의해 반환 된 값을 기반으로 모든 나가는 요청의 머리말에 필드 'Cookie': 'JSESSIONID=xxx'을 설정하려고 시도했지만 로그인 화면으로 다시 반송됩니다.

+0

당신은 대답 자신이 : cookieString = request.headers['Cookie']와 쿠키 문자열을 가져 저장 한 다음 후속 나가는 요청에 그것을로드합니까? –

+0

@RafaelAlmeida가 수정 사항을 추가했습니다. 저장해야하는 항목과 다시로드해야하는 항목을 명확히 할 수 있습니까? – Regan

답변

5

임시 개발 솔루션의 경우 내가 생각했던 것보다하기가 쉽다. 당신은 무엇을 시도 ... 다시 파일 및로드하기 위해 쿠키를 저장

request.headers.appendlist('Cookie', cookieString)