这是崔斯特的第五十五篇原创文章
终于有方法了 (๑• . •๑)
作为一名罗吹,先吹一波C罗牛皮,简直太帅了了了
瞧瞧这个眼神
建议大家可以看看这场比赛,西班牙VS葡萄牙,我相信你会爱上足球的
正文开始
在上一篇文章: 简单说明了自己对于该网站的想法,在经过两天的测试与研究之后,我有了更多的想法.
想法一: 为每个Cookies绑定唯一IP
你作为一个普通用户,如果对方网站检测到你不停地变换IP从不同地方来发送请求,那他肯定会有识别.那么我们可以把每一个Cookies分配唯一的IP代理,也就是你这个Cookies发送请求的代理始终是唯一的.
但是这种方法的实现方式还没有想出来,不知道该使用哪些技术栈来实现这个想法
想法二: 解决验证码
好,既然你弹出验证码,那我就解决它! 解决方法是:
- 该网站的验证码图片是
base64
,用python
转一下,接上第三方就OK - 同时该网站参数中还带有
token
参数,经过前端大佬的断点调试,发现是对多个字段的两次加密 - 保持会话session.你需要让对方网站知道是你这个用户,所以你的cookies,ip,headers相关信息必须保持一致,我当时的想法是使用
requests
的session
来完成这一步操作,但是很难完全模拟,因为整个爬虫使用scrapy
来写,处理验证码使用requests
来做,session
这部分不大好模拟.
附上一些为session
添加信息的代码
|
|
想法三: 不解决验证问题,无脑重试
这是最蠢的办法,也是我目前在使用的方法. /(ㄒoㄒ)/~~
思路是: 将cookies
保存到mongoDB做持久化,再写一个脚本,持续的向redis
中添加cookies
和start_urls
,然后对这些start_urls
不停地重试,对,就是不停地重试,直到把所有的链接跑完.本次需要采集的链接并不多,质量要求不高,只需要我采集到数据就好.
需要注意的是:
- 需要为你的表增加唯一键,不然会有重复数据
- 每条请求添加
dont_filter=True
,不然去重会影响爬取
添加cookies
和start_urls
代码
|
|
效果
我是用的是第三种方法,目前看来效果还行,数据已经爬取了大半,相信三天假过去了应该就没问题了.
如果以后要长期做这个项目的话,最好的办法应该还是第二种,从根本去解决问题.
本次做这个项目也收获颇多,对于cookies
使用更加有经验;感觉最好玩的是token
的加密与解密实现,对这方面感兴趣的可以了解下这个: zlib — Compression compatible with gzip