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

百度雲搜索,搜各種資料:http://www.bdyss.cn
搜網盤,搜各種資料:http://www.swpan.cn

模擬瀏覽器登錄

start_requests()方法,可以返回一個請求給爬蟲的起始網站,這個返回的請求相當於start_urls,start_requests()返回的請求會替代start_urls裏的請求

Request()get請求,可以設置,url、cookie、回調函數

FormRequest.from_response()表單post提交,第一個必須參數,上一次響應cookie的response對象,其他參數,cookie、url、表單內容等

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

在發送請求時cookie的操作,
meta={'cookiejar':1}表示開啓cookie記錄,首次請求時寫在Request()裏
meta={'cookiejar':response.meta['cookiejar']}表示使用上一次response的cookie,寫在FormRequest.from_response()裏post授權
meta={'cookiejar':True}表示使用授權後的cookie訪問需要登錄查看的頁面

獲取Scrapy框架Cookies

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

響應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'                                           #設置爬蟲名稱
    allowed_domains = ['edu.iqianyue.com']                  #爬取域名
    # start_urls = ['http://edu.iqianyue.com/index_user_login.html']     #爬取網址,只適於不需要登錄的請求,因爲沒法設置cookie等信息

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

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

    def parse(self, response):     #parse回調函數

        data = {                    #設置用戶登錄信息,對應抓包得到字段
            'number':'adc8868',
            'passwd':'279819',
            'submit':''
            }

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

        print('登錄中')
        """第二次用表單post請求,攜帶Cookie、瀏覽器代理、用戶登錄信息,進行登錄給Cookie授權"""
        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")   #登錄後可以查看一下登錄響應信息
        # print(a)
        """登錄後請求需要登錄才能查看的頁面,如個人中心,攜帶授權後的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  # 獲取網頁內容字節類型
        unicode_body = response.body_as_unicode()  # 獲取網站內容字符串類型

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

模擬瀏覽器登錄2

第一步、

爬蟲的第一次訪問,一般用戶登錄時,第一次訪問登錄頁面時,後臺會自動寫入一個Cookies到瀏覽器,所以我們的第一次主要是獲取到響應Cookies

首先訪問網站的登錄頁面,如果登錄頁面是一個獨立的頁面,我們的爬蟲第一次應該從登錄頁面開始,如果登錄頁面不是獨立的頁面如 js 彈窗,那麼我們的爬蟲可以從首頁開始

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

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

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

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

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

        data = {                                                                    # 設置用戶登錄信息,對應抓包得到字段
            'phone': '8615284816568',
            'password': '279819',
            'oneMonth': '1'
        }

        print('登錄中....!')
        """第二次用表單post請求,攜帶Cookie、瀏覽器代理、用戶登錄信息,進行登錄給Cookie授權"""
        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")   #登錄後可以查看一下登錄響應信息
        print('登錄響應結果:',jieg)

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

        """登錄後請求需要登錄才能查看的頁面,如個人中心,攜帶授權後的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('最終內容',leir)
        leir2 = response.xpath('//div[@class="set-tags"]/a/text()').extract()  # 得到個人中心頁面
        print(leir2)

image
【轉載自:http://www.lqkweb.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章