前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cookies池的后续解决方案

Cookies池的后续解决方案

作者头像
小歪
发布2018-07-25 15:38:00
5490
发布2018-07-25 15:38:00
举报
正文开始

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

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

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

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

想法二: 解决验证码

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

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

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

代码语言:javascript
复制
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代码

代码语言:javascript
复制
# 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与算法进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 想法一: 为每个Cookies绑定唯一IP
  • 想法二: 解决验证码
  • 想法三: 不解决验证问题,无脑重试
  • 效果
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档