cookie操作和代理
阿新 • • 發佈:2018-11-28
cookie操作
爬取豆瓣個人主頁
# -*- coding: utf-8 -*- import scrapy class DoubanSpider(scrapy.Spider): name = 'douban' #allowed_domains = ['www.douban.com'] start_urls = ['https://www.douban.com/accounts/login'] #重寫start_requests方法 def start_requests(self): #將請求引數封裝到字典data = { 'source': 'index_nav', 'form_email': '15027900535', 'form_password': '[email protected]' } for url in self.start_urls: yield scrapy.FormRequest(url=url,formdata=data,callback=self.parse) #針對個人主頁頁面資料進行解析操作 defparseBySecondPage(self,response): fp = open('second.html', 'w', encoding='utf-8') fp.write(response.text) #可以對當前使用者的個人主頁頁面資料進行指定解析操作 def parse(self, response): #登入成功後的頁面資料進行儲存 fp = open('main.html','w',encoding='utf-8') fp.write(response.text)#獲取當前使用者的個人主頁 url = 'https://www.douban.com/people/185687620/' yield scrapy.Request(url=url,callback=self.parseBySecondPage)
因為要進行登入操作,所以一定要使用post請求進行表單提交,那麼就必須重寫start_requests()方法;觀察程式碼就可以發現,當登入成功之後再次請求個人主頁,不再需要
刻意地處理cookie,那是因為scrapy已經幫我們省去了這樣的操作:第一次請求返回的cookie會在第二請求傳送的時候被攜帶。
代理
import scrapy class ProxydemoSpider(scrapy.Spider): name = 'proxyDemo' #allowed_domains = ['www.baidu.com/s?wd=ip'] start_urls = ['https://www.baidu.com/s?wd=ip'] def parse(self, response): fp = open('proxy.html','w',encoding='utf-8') fp.write(response.text)
配置好配置檔案,然後再執行,在proxy.html檔案中就會看到本機ip的瀏覽器頁面,ip就是真實的本機ip。
那如何更改ip呢?就用到了代理,在scrapy中使用代理操作需要對下載中介軟體下手。
那麼什麼是下載中介軟體呢?
下載中介軟體的作用就是攔截請求,將請求的ip進行更換。
流程:
1. 下載中介軟體類的自制定
a) 繼承object
b) 重寫process_request(self,request,spider)的方法
2. 配置檔案中進行下載中間價的開啟。
middlewares.py 就是下載中介軟體的定義檔案
from scrapy import signals #自定義一個下載中介軟體的類,在類中實現process_request(處理中間價攔截到的請求)方法 class MyProxy(object): def process_request(self,request,spider): #請求ip的更換 request.meta['proxy'] = "https://178.128.90.1:8080" # 這裡需要一個有效的代理ip
開啟下載中介軟體
# Enable or disable downloader middlewares # See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html DOWNLOADER_MIDDLEWARES = { 'proxyPro.middlewares.MyProxy': 543, # 數字大小代表優先順序 }
再次執行,開啟頁面發現ip就被更改了!