1. 程式人生 > >cookie操作和代理

cookie操作和代理

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) #針對個人主頁頁面資料進行解析操作 def
parseBySecondPage(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就被更改了!