第三百三十三節,web爬蟲講解2—Scrapy框架爬蟲—Scrapy模擬瀏覽器登陸html
模擬瀏覽器登陸web
start_requests()方法,能夠返回一個請求給爬蟲的起始網站,這個返回的請求至關於start_urls,start_requests()返回的請求會替代start_urls裏的請求瀏覽器
Request()get請求,能夠設置,url、cookie、回調函數cookie
FormRequest.from_response()表單post提交,第一個必須參數,上一次響應cookie的response對象,其餘參數,cookie、url、表單內容等框架
yield Request()能夠將一個新的請求返回給爬蟲執行dom
在發送請求時cookie的操做,
meta={'cookiejar':1}表示開啓cookie記錄,首次請求時寫在Request()裏
meta={'cookiejar':response.meta['cookiejar']}表示使用上一次response的cookie,寫在FormRequest.from_response()裏post受權
meta={'cookiejar':True}表示使用受權後的cookie訪問須要登陸查看的頁面scrapy
獲取Scrapy框架Cookieside
請求Cookie
Cookie = response.request.headers.getlist('Cookie')
print(Cookie)函數
響應Cookie
Cookie2 = response.headers.getlist('Set-Cookie')
print(Cookie2)post
# -*- 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)