Scrapy-攜帶cookie實(shí)現(xiàn)手動(dòng)驗(yàn)證碼登錄

在實(shí)現(xiàn)了用session登錄成功后(http://m.itdecent.cn/p/be0e73b52776
),嘗試在Scrapy中如何攜帶cookie來實(shí)現(xiàn)登入

難點(diǎn):

需要全程cookie傳遞,帶著cookie去下載驗(yàn)證碼圖片

參考:
http://m.itdecent.cn/p/72bca2dcac03
https://www.cnblogs.com/think-a-lot/p/9597952.html
思路:

(1)重寫start_url
(2)保存驗(yàn)證碼到本地,傳遞cookie
(3)獲取參數(shù),post方法帶參數(shù)請(qǐng)求實(shí)現(xiàn)登錄

import scrapy
import requests

headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
        }
login_url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'

class GushiwenSpider(scrapy.Spider):
    name = 'gushiwen'
    allowed_domains = ['gushiwen.org']
    start_urls = ['https://www.gushiwen.org/']
    # login_url='https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'


    # 重寫start_url 方法,獲取驗(yàn)證碼圖片,傳遞cookie
    def start_requests(self):
        return [scrapy.Request(url='https://so.gushiwen.org/RandCode.ashx',headers=headers,callback=self.get_code,meta={'cookiejar':1})]

    #保存驗(yàn)證碼圖片,帶cookie
    def get_code(self,response):
        with open ('code4.png','wb') as f:
            f.write(response.body)
        return [scrapy.Request(url=login_url,callback=self.get_VIEWSTATE,meta={'cookiejar':response.meta['cookiejar']})]

    # 獲取 VIEWSTATE 參數(shù)
    def get_VIEWSTATE(self,response):
        VIEWSTATE = response.xpath('//*[@id="__VIEWSTATE"]/@value').extract_first()
        print(VIEWSTATE)
        code=input('請(qǐng)輸入驗(yàn)證碼:')
        formdata = {
                '__VIEWSTATE': VIEWSTATE,
                '__VIEWSTATEGENERATOR': 'C93BE1AE',
                'from': 'http://so.gushiwen.org/user/collect.aspx',
                'email': ##,
                'pwd': ##,
                'code': code,
                'denglu': '登錄'
            }

        # post 方法請(qǐng)求
        return scrapy.FormRequest(url=login_url,formdata=formdata,callback=self.login,meta={'cookiejar':response.meta['cookiejar']})

    # 驗(yàn)證登錄結(jié)果
    def login(self,response):
        if response.url== 'https://so.gushiwen.org/user/collect.aspx':
                print('登陸成功')
        else:
                print('登入失敗')
        print(response.text)

ps:本人是小白一枚,內(nèi)容可能不太專業(yè),有不嚴(yán)謹(jǐn)?shù)牡胤秸?qǐng)指點(diǎn),謝謝呢~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 會(huì)話(Session)跟蹤是Web程序中常用的技術(shù),用來跟蹤用戶的整個(gè)會(huì)話。常用的會(huì)話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,792評(píng)論 1 49
  • HTTP cookie(也稱為web cookie,網(wǎng)絡(luò)cookie,瀏覽器cookie或者簡(jiǎn)稱cookie)是網(wǎng)...
    留七七閱讀 18,392評(píng)論 2 71
  • 2016.2.25日下午15:00
    Coding_Niu閱讀 269評(píng)論 1 1
  • 雖然自己會(huì)寫回調(diào)函數(shù),但是老是搞不清概念。今天來徹底搞懂回調(diào)函數(shù)。 題目:給一個(gè)人起名字,然后再叫出他的名字邏輯或...
    Komolei閱讀 308評(píng)論 0 0
  • 吶,英語(yǔ)課,耳機(jī)里播放著英語(yǔ),說著聽不懂的話,因?yàn)樯弦淮我呀?jīng)考完試,這次不用再考試,所以,我想起了簡(jiǎn)書,昨晚下載,...
    喜你為石無藥可疾閱讀 497評(píng)論 0 0

友情鏈接更多精彩內(nèi)容