zoukankan      html  css  js  c++  java
  • 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   
  • 相关阅读:
    二分搜索树的深度优先遍历和广度优先遍历
    数据结构与算法之非比较排序【Java】
    数据结构与算法之比较排序【Java】
    像素 转换 px dp
    Toast
    MySQL丶auto_increment
    MariaDB · 性能优化 · Extended Keys
    加唯一索引怎么会导致丢数据
    语句执行错误一· Count(Distinct) ERROR
    innodb参数 · innodb_flush_log_at_trx_commit
  • 原文地址:https://www.cnblogs.com/zwp-627/p/11296032.html
Copyright © 2011-2022 走看看