Cookies池的后续解决方案

正文开始

在上一篇文章: 从cookie池搭建说起,简单说明了自己对于该网站的想法,在经过两天的测试与研究之后,我有了更多的想法.

想法一: 为每个Cookies绑定唯一IP

你作为一个普通用户,如果对方网站检测到你不停地变换IP从不同地方来发送请求,那他肯定会有识别.那么我们可以把每一个Cookies分配唯一的IP代理,也就是你这个Cookies发送请求的代理始终是唯一的.

但是这种方法的实现方式还没有想出来,不知道该使用哪些技术栈来实现这个想法

想法二: 解决验证码

好,既然你弹出验证码,那我就解决它! 解决方法是:

  1. 该网站的验证码图片是base64,用python转一下,接上第三方就OK
  2. 同时该网站参数中还带有token参数,经过前端大佬的断点调试,发现是对多个字段的两次加密
  3. 保持会话session.你需要让对方网站知道是你这个用户,所以你的cookies,ip,headers相关信息必须保持一致,我当时的想法是使用requestssession来完成这一步操作,但是很难完全模拟,因为整个爬虫使用scrapy来写,处理验证码使用requests来做,session这部分不大好模拟.

附上一些为session添加信息的代码

def __init__(self, my_cookie, proxy, headers):
    self.session = requests.session()
    self.session.cookies.update(my_cookie)
    self.session.headers.update({'User-Agent': headers})
    self.session.update(proxy)

想法三: 不解决验证问题,无脑重试

这是最蠢的办法,也是我目前在使用的方法. /(ㄒoㄒ)/~~

思路是: 将cookies保存到mongoDB做持久化,再写一个脚本,持续的向redis中添加cookiesstart_urls,然后对这些start_urls不停地重试,对,就是不停地重试,直到把所有的链接跑完.本次需要采集的链接并不多,质量要求不高,只需要我采集到数据就好.

需要注意的是:

  1. 需要为你的表增加唯一键,不然会有重复数据
  2. 每条请求添加dont_filter=True,不然去重会影响爬取

添加cookiesstart_urls代码

# add cookies and start_urls to local_redis
while True:
    if local_redis.scard('spider:cookies') < 10:
        for i in cookies_list:
            local_redis.sadd('spider:cookies', i)
        print("cookies Done")

    if local_redis.scard('spider:start_urls') < 10:
        for i in url_list:
            local_redis.sadd('spider:start_urls', i)
        print("start_urls Done")

    time.sleep(10)

效果

我是用的是第三种方法,目前看来效果还行,数据已经爬取了大半,相信三天假过去了应该就没问题了.

如果以后要长期做这个项目的话,最好的办法应该还是第二种,从根本去解决问题.

本次做这个项目也收获颇多,对于cookies使用更加有经验;感觉最好玩的是token的加密与解密实现,对这方面感兴趣的可以了解下这个: zlib — Compression compatible with gzip

原文发布于微信公众号 - Python爬虫与算法进阶(zhangslob)

原文发表时间:2018-06-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SAP最佳业务实践

想学FM系列(16)-SAP FM模块:预算结构(7)-预算结构操作-多层预算结构维护

3.2.2.3 多层预算结构的维护 ? 1)FMHIE_HIEID- 编辑层次结构标识 功能为多层预算结构备用树定义一相标识ID,并定义相关属性,为之后生成备...

52380
来自专栏杨建荣的学习笔记

MySQL备份调度器的实现

对于MySQL方向的调度需求考虑了好久,总是感觉不够优雅,不够灵活。从我的感觉来看,如果设置成为crontab,其实管理起来是比较臃肿的。

13530
来自专栏星流全栈

React + Redux 最佳实践

31750
来自专栏数据派THU

手把手教你安装深度学习软件环境(附代码)

来源:机器之心 本文长度为2800字,建议阅读5分钟。 本文向你解释如何在一台新装的 Ubuntu 机器上安装 Python 和 Nvidia 硬件驱动、各类库...

22680
来自专栏Material Design组件

Material Design —Progress & activity

21830
来自专栏魂祭心

原 数学与多线程

30240
来自专栏MixLab科技+设计实验室

DIY一个以图搜图引擎1

大家好,凡关注本公众号的用户都可参与到这个小实验中来,基于微信头像的数据,我发现这几个有趣的事情(注意保密,以下都只显示头像,我也只能取到头像和昵称的数据,其他...

38870
来自专栏IT派

从零开始:手把手教你安装深度学习操作系统、驱动和各种python库!

为了研究强化学习,最近购置了一台基于 Ubuntu 和英伟达 GPU 的深度学习机器。尽管目前在网络中能找到一些环境部署指南,但目前仍然没有全面的安装说明。另外...

47280
来自专栏PPV课数据科学社区

数据挖掘系列(5)使用mahout做海量数据关联规则挖掘

上一篇介绍了用开源数据挖掘软件weka做关联规则挖掘,weka方便实用,但不能处理大数据集,因为内存放不下,给它再多的时间也是无用,因此需要进行分布式计算,ma...

31440
来自专栏蓝天

向量时钟解决数据一致性

向量时钟,最早是用于分布式系统中进程间的时间同步。由于在分布式系统中没有一个直接的全局逻辑时钟。在一个由n个并发进程构成的系统中,每个事件的逻辑时钟均由一个n...

12410

扫码关注云+社区

领取腾讯云代金券