cookie池的维护

 

存储形式:

  • 存储在redis中,“spider_name:username–password":cookie

建立py文件及包含方法:

  • initcookies() 初始化所有账号的cookies,将所有账号对用进行登陆获取cookies并保存在redis中
  • update_cookie(spider_name,username,password)   # 重新获取账号对应的cookies,并存入redis中
  • remove_cookie(spider_name,usrname,password)    # 从redis中删除改账号对应的cookie
  • get_cookie(username,password)    # 尝试登陆该账号获取cookies

在scrapy下载器中间件的process_request()随机从cookie池选择一个cookie,对request进行设置,并在request的meta中保存cookie对应的账号

def process_request(self,request,spider):
    # 获取redis中所有的键(假设redis中只保存了cookies)
    redisKeys = self.rconn.keys()
    elem = random.choice(redisKeys)
    request.cookies = cookie
    # 在请求中记录当前cookies对应的账号和密码
    request.meta["accountText"] = elem.split(":")[-1]

在下载器中间件的process_response()获取响应,如果响应状态码为301、302等,说明页面重定向,该cookie失效,进行cookie的更新与删除

def process_response(self,request,response,spider):
    if response.status in [300, 301, 302, 303]:
        # 获取重定向的url
        redirect_url = response.headers["location"]
        if url == "login_url":# 如果是登陆页面,说明当前cookies失效了,需要更新
            username,passworod = request.meta['accountText'].split("--")
            update_cookie(spider_name,username,password)
        elif url=="验证页面":# 说明账号被封了
            username,passworod = request.meta['accountText'].split("--")
            remove_cookie(spider_name,username,password)
        request = request.copy()
        request.dont_filter = True
        return request   

 

转载于:https://www.cnblogs.com/zwp-627/p/11296032.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值