12刀荒、web爬蟲講解2—Scrapy框架爬蟲—Scrapy模擬瀏覽器登錄—獲取Scrapy框架Cookies

百度云搜索,搜各種資料:http://bdy.lqkweb.com

搜網(wǎng)盤棘钞,搜各種資料:http://www.swpan.cn

模擬瀏覽器登錄

start_requests()方法缠借,可以返回一個請求給爬蟲的起始網(wǎng)站,這個返回的請求相當(dāng)于start_urls宜猜,start_requests()返回的請求會替代start_urls里的請求

Request()get請求泼返,可以設(shè)置,url宝恶、cookie符隙、回調(diào)函數(shù)

FormRequest.from_response()表單post提交,第一個必須參數(shù)垫毙,上一次響應(yīng)cookie的response對象霹疫,其他參數(shù),cookie综芥、url丽蝎、表單內(nèi)容等

yield Request()可以將一個新的請求返回給爬蟲執(zhí)行

在發(fā)送請求時cookie的操作,
meta={'cookiejar':1}表示開啟cookie記錄膀藐,首次請求時寫在Request()里
meta={'cookiejar':response.meta['cookiejar']}表示使用上一次response的cookie屠阻,寫在FormRequest.from_response()里post授權(quán)
meta={'cookiejar':True}表示使用授權(quán)后的cookie訪問需要登錄查看的頁面

獲取Scrapy框架Cookies

請求Cookie
Cookie = response.request.headers.getlist('Cookie')
print(Cookie)

響應(yīng)Cookie
Cookie2 = response.headers.getlist('Set-Cookie')
print(Cookie2)

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request,FormRequest

class PachSpider(scrapy.Spider):                            #定義爬蟲類,必須繼承scrapy.Spider
    name = 'pach'                                           #設(shè)置爬蟲名稱
    allowed_domains = ['edu.iqianyue.com']                  #爬取域名
    # start_urls = ['http://edu.iqianyue.com/index_user_login.html']     #爬取網(wǎng)址,只適于不需要登錄的請求额各,因為沒法設(shè)置cookie等信息

    header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}  #設(shè)置瀏覽器用戶代理

    def start_requests(self):       #用start_requests()方法,代替start_urls
        """第一次請求一下登錄頁面国觉,設(shè)置開啟cookie使其得到cookie,設(shè)置回調(diào)函數(shù)"""
        return [Request('http://edu.iqianyue.com/index_user_login.html',meta={'cookiejar':1},callback=self.parse)]

    def parse(self, response):     #parse回調(diào)函數(shù)

        data = {                    #設(shè)置用戶登錄信息虾啦,對應(yīng)抓包得到字段
            'number':'adc8868',
            'passwd':'279819',
            'submit':''
            }

        # 響應(yīng)Cookie
        Cookie1 = response.headers.getlist('Set-Cookie')   #查看一下響應(yīng)Cookie麻诀,也就是第一次訪問注冊頁面時后臺寫入瀏覽器的Cookie
        print(Cookie1)

        print('登錄中')
        """第二次用表單post請求,攜帶Cookie傲醉、瀏覽器代理蝇闭、用戶登錄信息,進行登錄給Cookie授權(quán)"""
        return [FormRequest.from_response(response,
                                          url='http://edu.iqianyue.com/index_user_login',   #真實post地址
                                          meta={'cookiejar':response.meta['cookiejar']},
                                          headers=self.header,
                                          formdata=data,
                                          callback=self.next,
                                          )]
    def next(self,response):
        a = response.body.decode("utf-8")   #登錄后可以查看一下登錄響應(yīng)信息
        # print(a)
        """登錄后請求需要登錄才能查看的頁面硬毕,如個人中心呻引,攜帶授權(quán)后的Cookie請求"""
        yield Request('http://edu.iqianyue.com/index_user_index.html',meta={'cookiejar':True},callback=self.next2)
    def next2(self,response):
        # 請求Cookie
        Cookie2 = response.request.headers.getlist('Cookie')
        print(Cookie2)

        body = response.body  # 獲取網(wǎng)頁內(nèi)容字節(jié)類型
        unicode_body = response.body_as_unicode()  # 獲取網(wǎng)站內(nèi)容字符串類型

        a = response.xpath('/html/head/title/text()').extract()  #得到個人中心頁面
        print(a)

模擬瀏覽器登錄2

第一步、

爬蟲的第一次訪問吐咳,一般用戶登錄時逻悠,第一次訪問登錄頁面時,后臺會自動寫入一個Cookies到瀏覽器韭脊,所以我們的第一次主要是獲取到響應(yīng)Cookies

首先訪問網(wǎng)站的登錄頁面蹂风,如果登錄頁面是一個獨立的頁面,我們的爬蟲第一次應(yīng)該從登錄頁面開始乾蓬,如果登錄頁面不是獨立的頁面如 js 彈窗惠啄,那么我們的爬蟲可以從首頁開始

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request,FormRequest
import re

class PachSpider(scrapy.Spider):                            #定義爬蟲類,必須繼承scrapy.Spider
    name = 'pach'                                           #設(shè)置爬蟲名稱
    allowed_domains = ['dig.chouti.com']                    #爬取域名
    # start_urls = ['']                                     #爬取網(wǎng)址,只適于不需要登錄的請求任内,因為沒法設(shè)置cookie等信息

    header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}  #設(shè)置瀏覽器用戶代理

    def start_requests(self):
        """第一次請求一下登錄頁面撵渡,設(shè)置開啟cookie使其得到cookie,設(shè)置回調(diào)函數(shù)"""
        return [Request('http://dig.chouti.com/',meta={'cookiejar':1},callback=self.parse)]

    def parse(self, response):
        # 響應(yīng)Cookies
        Cookie1 = response.headers.getlist('Set-Cookie')                            #查看一下響應(yīng)Cookie死嗦,也就是第一次訪問注冊頁面時后臺寫入瀏覽器的Cookie
        print('后臺首次寫入的響應(yīng)Cookies:',Cookie1)

        data = {                                                                    # 設(shè)置用戶登錄信息趋距,對應(yīng)抓包得到字段
            'phone': '8615284816568',
            'password': '279819',
            'oneMonth': '1'
        }

        print('登錄中....!')
        """第二次用表單post請求,攜帶Cookie越除、瀏覽器代理节腐、用戶登錄信息外盯,進行登錄給Cookie授權(quán)"""
        return [FormRequest.from_response(response,
                                          url='http://dig.chouti.com/login',                        #真實post地址
                                          meta={'cookiejar':response.meta['cookiejar']},
                                          headers=self.header,
                                          formdata=data,
                                          callback=self.next,
                                          )]

    def next(self,response):
        # 請求Cookie
        Cookie2 = response.request.headers.getlist('Cookie')
        print('登錄時攜帶請求的Cookies:',Cookie2)

        jieg = response.body.decode("utf-8")   #登錄后可以查看一下登錄響應(yīng)信息
        print('登錄響應(yīng)結(jié)果:',jieg)

        print('正在請需要登錄才可以訪問的頁面....!')

        """登錄后請求需要登錄才能查看的頁面,如個人中心翼雀,攜帶授權(quán)后的Cookie請求"""
        yield Request('http://dig.chouti.com/user/link/saved/1',meta={'cookiejar':True},callback=self.next2)

    def next2(self,response):
        # 請求Cookie
        Cookie3 = response.request.headers.getlist('Cookie')
        print('查看需要登錄才可以訪問的頁面攜帶Cookies:',Cookie3)

        leir = response.xpath('//div[@class="tu"]/a/text()').extract()  #得到個人中心頁面
        print('最終內(nèi)容',leir)
        leir2 = response.xpath('//div[@class="set-tags"]/a/text()').extract()  # 得到個人中心頁面
        print(leir2)

image

【轉(zhuǎn)載自:http://www.leiqiankun.com/?id=55

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饱苟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子狼渊,更是在濱河造成了極大的恐慌箱熬,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狈邑,死亡現(xiàn)場離奇詭異城须,居然都是意外死亡,警方通過查閱死者的電腦和手機米苹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門糕伐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蘸嘶,你說我怎么就攤上這事赤炒。” “怎么了亏较?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵莺褒,是天一觀的道長。 經(jīng)常有香客問我雪情,道長遵岩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任巡通,我火速辦了婚禮尘执,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宴凉。我一直安慰自己誊锭,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布弥锄。 她就那樣靜靜地躺著丧靡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪籽暇。 梳的紋絲不亂的頭發(fā)上温治,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音戒悠,去河邊找鬼熬荆。 笑死,一個胖子當(dāng)著我的面吹牛绸狐,可吹牛的內(nèi)容都是我干的卤恳。 我是一名探鬼主播累盗,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼突琳!你這毒婦竟也來了若债?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤本今,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后主巍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冠息,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年孕索,在試婚紗的時候發(fā)現(xiàn)自己被綠了逛艰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡搞旭,死狀恐怖散怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肄渗,我是刑警寧澤镇眷,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站翎嫡,受9級特大地震影響欠动,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惑申,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一具伍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧圈驼,春花似錦人芽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至靴迫,卻和暖如春祈坠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矢劲。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工赦拘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芬沉。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓躺同,卻偏偏與公主長得像阁猜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蹋艺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容