利用scrapy模擬登入知乎

2022-08-17 18:00:15 字數 2590 閱讀 2453

閒來無事,寫乙個模擬登入知乎的小demo。

分析網頁發現:登入需要的手機號,密碼,_xsrf引數,驗證碼

實現思路:

1、獲取驗證碼

2、獲取_xsrf 引數

3、攜帶引數,請求登入

驗證碼url : "".format(t=t)  # t 為時間戳

登入介面url : ""

手機登入申請url : ''

實現**:

首先配置檔案 settings 中 robotstxt_obey = false  

1、開頭及驗證碼處理部分,先重寫scrapy的start_requests方法。其次利用pillow 來處理驗證碼,將驗證碼顯示出來,手動填寫(畢竟打碼是需要費用的),知乎預設的驗證碼為中文,經分析發現驗證碼url 後面的 lang 引數決定語言,所以試著將語言改為英文(en)

#

-*- coding: utf-8 -*-

import

scrapy

import

time

import

json

from pil import

image

class

zhihuspider(scrapy.spider):

name = '

zhihu

'allowed_domains = ['

www.zhihu.com']

#重寫start_requests方法,處理驗證碼問題

defstart_requests(self):

t = str(time.time()).replace('','.'

)

#驗證碼url

start_urls = "

".format(t=t)

self.header =

#請求驗證碼的url

return [scrapy.request(url=start_urls,headers=self.header,callback=self.capcha,dont_filter=true)]

#獲取驗證碼

defcapcha(self,response):

#獲取驗證碼,將驗證馬寫入本地

#利用pillow開啟驗證碼

請開啟檔案%s自行輸入

請輸入驗證碼》")

data =

log_url = "

"return scrapy.request(url=log_url,callback=self.parse_login,headers=self.header,meta=data,dont_filter=true)

2、得到驗證碼後,開始搞_xsrf引數,從登入原始碼中分析得到_xsrf 在屬性為name="_xsrf" 的input 節點中的value值

#

解析申請登陸的頁面,獲取引數xsrf

defparse_login(self,response):

xsrf = response.xpath('

//input[@name="_xsrf"]/@value

').extract_first()

ifnot

xsrf:

print("

請求錯誤")

return

''phone_num = input("

請輸入手機號碼")

password = input("

請輸入密碼")

data =

#用手機號-密碼 登入的url

url = '

'return scrapy.formrequest(url=url,callback=self.login_zh,headers=self.header,formdata=data,dont_filter=true,meta=)

3、引數都獲取到後就可以模擬登入了

#

驗證是否登入成功

deflogin_zh(self,response):

print(json.loads(response.text)['

msg'

]) url = "

"#請求登入知乎

yield scrapy.request(url=url,callback=self.zh,headers=self.header,dont_filter=true,meta=)

#後續解析知乎登入後的頁面

defzh(self,response):

print(response.text)

本次登入後,並未對頁面進行解析,只是列印一下頁面,作為驗證。

Scrapy模擬登入知乎

scrapy startproject zhihu login scrapy genspider zhihu www.zhihu.com coding utf 8 import scrapy class zhihuspider scrapy.spider name zhihu allowed dom...

Scrapy 登入知乎

需要先建立乙個scrapy專案,然後建立乙個testspider 按照需要修改items 然後開始修改testspider的內容,中都有注釋,不作贅述 coding utf 8 import scrapy import os import time mode 1 tencent 2 free mod...

模擬登入知乎 利用selenium接管瀏覽器

本文借鑑於 原理 我們使用selenium中的webdirver開啟的瀏覽器沒有瀏覽器記錄,也就是最純淨的瀏覽器,所以也不會攜帶cookie之類的資訊,但是我們使用selenium接管瀏覽器時,建立的瀏覽器時copy原來的瀏覽器配置檔案,瀏覽器記錄也會被copy,所以他會帶上cookie資訊 此次模...