scrapy使用middleware+selenium自定义cookies中间件

本文介绍如何结合Scrapy与Selenium自动获取网站Cookies,实现动态网页爬虫。通过编写Middleware,自定义获取Cookies流程,适用于需要实时Cookies才能访问的网站。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于一些网站需要实时获取cooikes才可以爬取可以使用selenium来进行实时获取网站的cookies
在scrapy不仅可以在spider中直接使用selenium,还可以通过中间件来实现。

首先编写middleware.py

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


class cookiesMiddleware:

  def __init__(self):
    self.cookies = self.get_cookie()

  def get_cookie(self):
        opt = webdriver.ChromeOptions()
        #设置selenium时,启动时浏览器不弹出
        opt.add_argument('--headless')
        opt.add_argument('--disable-gpu')
        driver = webdriver.Chrome(chrome_options=opt)
        # 加载页面
        driver.get(‘https://btc.com/) #这边填写能获取到网站cookies的网址
        time.sleep(4)
        # 由于我获取cookie的页面页面无需用户登陆,所以直接获取cookies
        # Selenium为我们提供了get_cookies来获取登录cookies
        cookies = driver.get_cookies()
        cookie = {}
        # scrapy使用cookies需要封装成dict,所以在这边将获取到的cookies处理成dict类型,方便使用
        for s in cookies:
            cookie[s['name']] = s['value']
        # 获取到数据后关闭浏览器
        driver.close()
        return cookie

  def process_request(self, request, spider):
    request.cookies = self.cookies
    return None

设置sttings

#当COOKIES_ENABLED是注释的时候scrapy默认没有开启cookie
#当COOKIES_ENABLED没有注释设置为False的时候scrapy默认使用了settings里面的cookie
#当COOKIES_ENABLED设置为True的时候scrapy就会把settings的cookie关掉,使用自定义cookie
COOKIES_ENABLED = True

#激活中间件
DOWNLOADER_MIDDLEWARES = {
'projectname.middleware.cookiesMiddleware': 300,
}

这样子在使用Request请求是就会带上我们自定义获取的cookies

注意:自定义cookies的时候需要将COOKIES_ENABLED设置为True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值