Scrapy 시 뮬 레이 션 로그 인 새 버 전
첫걸음
로그 인 이 필요 하기 때문에 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 프레임 워 크 시 뮬 레이 션 로그 인 으로 수정 되 었 습 니 다. 내용 을 알 아야 하기 때문에 이 변경 을 한 것 입 니 다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.