1. 程式人生 > >第三百三十三節,web爬蟲講解2—Scrapy框架爬蟲—Scrapy模擬瀏覽器登錄—獲取Scrapy框架Cookies

第三百三十三節,web爬蟲講解2—Scrapy框架爬蟲—Scrapy模擬瀏覽器登錄—獲取Scrapy框架Cookies

pid 設置 ade form 需要 span coo decode firefox

第三百三十三節,web爬蟲講解2—Scrapy框架爬蟲—Scrapy模擬瀏覽器登錄

模擬瀏覽器登錄

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)

第三百三十三節,web爬蟲講解2—Scrapy框架爬蟲—Scrapy模擬瀏覽器登錄—獲取Scrapy框架Cookies