Python爬虫scrapy框架Cookie池(微博Cookie池)的使用

下载代码Cookie池(这里主要是微博登录,也可以自己配置置其他的站点网址)

下载代码GitHub:https://github.com/Python3WebSpider/CookiesPool

下载安装过后注意看网页下面的相关基础配置和操作!!!!!!!!!!!!!

 

自己的设置主要有下面几步:

1、配置其他设置

2、设置使用的浏览器

3、设置模拟登陆

源码cookies.py的修改(以下两处不修改可能会产生bug)

 

4、获取cookie

随机获取Cookies: http://localhost:5000/weibo/random(注意:cookie使用时是需要后期处理的!!)

简单的处理方式,如下代码(偶尔需要对获取的cookie处理):

 def get_cookie(self):
        return requests.get('http://127.0.0.1:5000/weibo/random').text

    def stringToDict(self,cookie):
        itemDict = {}
        items = cookie.replace(':', '=').split(',')
        for item in items:
            key = item.split('=')[0].replace(' ', '').strip(' "')
            value = item.split('=')[1].strip(' "')
            itemDict[key] = value
        return itemDict

    def start_requests(self):
        ua = UserAgent()
        headers = {
            'User-Agent': ua.random,
            }
        cookies = self.stringToDict(str(self.get_cookie().strip('{|}')))

        yield scrapy.Request(url=self.start_urls[0], headers=headers,
                             cookies=cookies, callback=self.parse)cookies = self.stringToDict(str(self.get_cookie().strip('{|}')))

        yield scrapy.Request(url=self.start_urls[0], headers=headers,
                             cookies=cookies, callback=self.parse)

scrapy爬虫的使用示例(爬取微博):

middlewares.py中自定义请求中间件

import requests
import logging
import json
# 自定义微博请求的中间件
class WeiBoMiddleWare(object):
    def __init__(self, cookies_pool_url):
        self.logging = logging.getLogger("WeiBoMiddleWare")
        self.cookies_pool_url = cookies_pool_url

    def get_random_cookies(self):
        try:
            response = requests.get(self.cookies_pool_url)
        except Exception as e:
            self.logging.info('Get Cookies failed: {}'.format(e))
        else:
            # 在中间件中,设置请求头携带的Cookies值,必须是一个字典,不能直接设置字符串。
            cookies = json.loads(response.text)
            self.logging.info('Get Cookies success: {}'.format(response.text))
            return cookies

    @classmethod
    def from_settings(cls, settings):
        obj = cls(
            cookies_pool_url=settings['WEIBO_COOKIES_URL']
        )
        return obj

    # process_request()该方法会被多次调用,每一个request请求都会经过这个方法交给downloader
    def process_request(self, request, spider):
        request.cookies = self.get_random_cookies()
        return None

    def process_response(self, request, response, spider):
        """
        对此次请求的响应进行处理。
        :param request:
        :param response:
        :param spider:
        :return:
        """
        # 携带cookie进行页面请求时,可能会出现cookies失效的情况。访问失败会出现两种情况:1. 重定向302到登录页面;2. 也能会出现验证的情况;

        # 想拦截重定向请求,需要在settings中配置。
        if response.status in [302, 301]:
            # 如果出现了重定向,获取重定向的地址
            redirect_url = response.headers['location']
            if 'passport' in redirect_url:
                # 重定向到了登录页面,Cookie失效。
                self.logging.info('Cookies Invaild!')
            if '验证页面' in redirect_url:
                # Cookies还能继续使用,针对账号进行的反爬虫。
                self.logging.info('当前Cookie无法使用,需要认证。')

            # 如果出现重定向,说明此次请求失败,继续获取一个新的Cookie,重新对此次请求request进行访问。
            request.cookies = self.get_random_cookies()
            # 返回值request: 停止后续的response中间件,而是将request重新放入调度器的队列中重新请求。
            return request

        # 如果没有出现重定向,直接将response向下传递后续的中间件。
        return response

settings.py 中的配置:

5、录入账号和密码:

格式规定(账号----密码)

6、验证:(注意:使用cmd)

7、使用时注意保持cmd打开运行!!

使用时一定要打开cmd,并运行如第6步。

得到Cookie是判断是否处理处理Cookie(几乎都需要!!)类比第4步!!!

 

 

  • 9
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值