Scrapy 시 뮬 레이 션 로그 인 새 버 전

2783 단어
이 글 을 쓴 이 유 는 로그 인 이 이미 개편 되 었 다 는 것 을 알 고 있 기 때 문 입 니 다. 새 로그 인 과 오래된 로그 인 의 차이 가 매우 큽 니 다. 새 로그 인 post 요청 은 필드 를 줄 이 는 동시에 필드 를 추 가 했 습 니 다. 또한 새로 추 가 된 필드, 예 를 들 어 signature 의 값 은 일부 알고리즘 을 통 해 얻 은 것 이기 때문에 처리 하기 어렵 습 니 다. 따라서 자신의 로그 인 과정 을 기록 하 십시오.
첫걸음
로그 인 이 필요 하기 때문에 Scrapy 의 입구 함 수 를 다시 작성 합 니 다. 현재 로그 인 에 인증 코드 가 필요 한 지 검증 하고 쿠키 를 가 져 오 는 역할 을 합 니 다.(오래된 버 전 은 로그 인 할 때 로그 인 홈 페이지 에 직접 방문 하여 xsrf 필드 정 보 를 얻 을 수 있 습 니 다. 새 버 전 은 이 필드 가 필요 하지 않 기 때문에 로그 인 홈 페이지 의 url 에 접근 할 필요 가 없습니다)
    def start_requests(self):
        yield scrapy.Request('https://www.zhihu.com/api/v3/oauth/captcha?lang=cn',
                       headers=self.headers, callback=self.is_need_capture)

두 번 째 단계
인증 코드 그림 을 요청 하고 그림 을 로 컬 로 다운로드 하 십시오.
    def is_need_capture(self, response):
        yield scrapy.Request('https://www.zhihu.com/captcha.gif?r=%d&type=login' % (time.time() * 1000),
                             headers=self.headers, callback=self.capture, meta={"resp": response})


세 번 째 단계
디 버 깅 모드 에서 잘못된 비밀 번 호 를 입력 하여 로그 인 할 때 가지 고 있 는 post 인 자 를 얻 습 니 다. 다음 과 같 습 니 다. signature 는 알고리즘 에 따라 생 성 되 었 습 니 다. timestamp 는 시간 스탬프 등 입 니 다. 마지막 으로 scrapy. FormRequest 에서 로그 인 을 요청 합 니 다. 요청 과정 마다 headers 를 가 져 가 야 합 니 다. 그렇지 않 으 면 오류 가 발생 할 수 있 습 니 다.밑 에 원본 주소 가 올 라 갑 니 다.
post_data = {
            "client_id": clientId,
            "username": "18610379194",
            "password": "tuyue7208562",
            "grant_type": grantType,
            "source": source,
            "timestamp": timestamp,
            "signature": self.get_signature(grantType, clientId, source, timestamp),  #     
            "lang": "cn",
            "ref_source": "homepage",
            "captcha": self.get_captcha(need_cap),  #        
            "utm_source": ""
        }

        return [scrapy.FormRequest(
            url="https://www.zhihu.com/api/v3/oauth/sign_in",
            formdata=post_data,
            headers=self.headers,
            callback=self.check_login
        )]

이때 개인 홈 페이지 를 요청 하여 홈 페이지 의 개인 정 보 를 받 아 로그 인 이 완료 되 었 습 니 다.
 def check_login(self, response):
        #         
        yield scrapy.Request('https://www.zhihu.com/inbox', headers=self.headers)

원본 주소
마지막 으로 github 의 weldon 2010 작가 에 게 감 사 드 립 니 다. 이 작 가 는 requests 라 이브 러 리 로 이 루어 진 아 날로 그 로그 인 주소 입 니 다 (https://github.com/weldon2010/Python/blob/master/login_zhihu.py) 본 고 는 이 를 바탕 으로 Scrapy 프레임 워 크 시 뮬 레이 션 로그 인 으로 수정 되 었 습 니 다. 내용 을 알 아야 하기 때문에 이 변경 을 한 것 입 니 다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기