python爬虫时p/解post表单、获取登录cookies的一些技术总结(持续更新中)

爬虫工作的日常,无非与网站的反爬虫殊死搏斗。而通过cookies阻碍机器人请求的反爬方式,是非常有效的手段。只要隐藏得够深,要想完全p/解,并不见得是件简单的事情。嗯,程序员就是这样为难程序员。

p/解了不少通过cookies反爬的网站,根据个人不成熟的经验,这里分享下我平时p/解过程中的一些心得:

1、找到最后得到目标数据的url,把所有的url,headers,data 完全复制,用代码请求。

2、确保第一步能够得到数据(要取最新的url、headers、data),如果实在得不到数据,考虑部分cookies只能用一次,用session先请求其他网页url,再解决。

3、得到数据后,尽量删除cookies后再请求,只要能请求到数据,尽量把cookies全部删除。只留下最少必要的cookies。

4、正常情况下,筛选出的、有用到的关键cookies只有几个,通过这几个cookies的生成链接,再去模拟关键的url请求。

5、如果是需要登录获取数据的网站,可以考虑直接模拟登录环节,通过登录获得的cookies直接拿去请求数据,这常常是有效的方式,即使无法直接获得数据,该cookies肯定也是后续会用到的。

6、整个流程,以得到最后数据为出发点,缺啥找啥。目标明确后,高效、多次地进行模拟,以获得该cookies值为第一目标。

7、有时即使获取了该cookies值,拿去请求却无法获取正常的数据,考虑还需将该cookies进行多次的提交验证。

8、抓包工具通过分析获取关键url的时间段内的所有请求(比如第一个关键url在2分11秒,第二个关键url在2分15秒,那么着重分析这4秒内发生的url交互情况)。

9、分析过程中,某些的关键url是动态变化的,通过多次抓包验证,不建议一上来就把url写死。

10、一个url的多种response,可能是同一个问题产生的(比如更换某个cookies即可),用同一种解决方式就能处理。

11、如果遇到复制的加密,实在无法获取时关键信息时,考虑通过手机端的提取数据,如果关键cookies时效很长,考虑做cookies管理

12、遇到post的参数名称是简短字母时,由于无法搜索查到关键位置,可以去查url的关键组成部分。

13、p/解js时,先把所需的js放到webstorm中,先运行js,在没有报错之后(处理完所有函数、对象后),再进行目标函数的构造和调用。

14、p/解post登录的表单之前,先用两组账号密码进行登录,查看表单各字段中,哪些字段是固定值,哪些是变化的。

15、若在浏览器能得到这个参数,那么只要模拟完全,就一定可以在js脚本中获取。如果不能在脚本中生成,说明模拟得不够完全。有2种情况: 一种是你放进去的代码没有完全跑完,中途遇到错误自动退出了。另一种情况是:你放进去的js代码不完全,这时应该继续到网页中寻找。

16、为了防止多余的网页代码的干扰,尽可能地把断点放在先执行的那个js文件内的第一行代码处,如果这个脚本没有执行就产生了目标参数,那么说明这个参数 的获取在这个文件加载之前就产生了(当然,也可能在前面生成后又被删除了)。

17、要执行的js若是动态的,需要每次获取到js脚本后放进js中运行,这时传参进去的是字符串,默认情况下,js文件运行时并不直接执行传入的这段字符串,需要把字符串转化成可以运行的脚本。(这个时候要特别注意代码格式的转换)

18、如果js最后生成的参数包含多个参数,若确实无法完全模拟出最后的完整参数,在重点参数完成p/解后,可以考虑拿到这个目标参数的一个样板,然后对其中的个别参数做随机的生成(如自生成屏幕规格,用户代理)等。

19、如果无法找到生成参数的js文件,可以考虑到网页的html中查看,可能隐藏在某个html下的script中。

20、遇到get请求,并且请求的url中有加密参数,可以先尝试去除该字段,看是否可以返回正确数据,有时没必要把每一个加密参数都p/解出来

21、有时,运行js脚本后,发现并没有生成我们需要的参数,此时会认为这段js不是关键js。其实还有一个可能,那就是,你这段js运行的 时候可能没有完全触发运行,导致某些参数没有运行生成。

22、有时js代码运行后程序正常结束,虽然没有报错的,但是,某些节点被检测到,最后没有生成我们的参数,也就是说,它设置了陷阱,虽然没有报错,

但是陷阱的结果是:
你拿不到数据,并且不清楚哪里出了问题。

这时该有的猜测是:

运行过程肯定是出错的,只不过被代码捕获处理后,没有展现出来,同时,我们的参数没有生成。这时重点查代码里面的try....catch...

 

23、p/解js的重要基础思想,缺啥补啥,不能一直想着p/解不掉,要想着,此刻p/解到哪个环节了,正在被哪个环节卡壳了,落手处一定要具体

24、不能全信pycharm,pycharm也有错误的时候,有时直接在cmd中运行代码反而是能得到数据的。

25、当遇到的js文件是一个复杂的自调用函数时,老老实实把所有js拿来运行,一直让他运行到我们所需要的、生成目标参数的位置即可,中间遇到无法执行的,缺啥补啥,坚信可以得到我们需要的加密结果,中途再多 困难也只是暂时的。

26、如果调试过程中,自动进入断点,导致无法调试,可以尝试把网页的所有源码下载下来,在webstorm中打开,更改js代码后,再在浏览器中打开,从而完成自己的调试。

27、建议把p/解完的网站,重新再次p/解多遍,加深对这种类型反爬技术的理解。

28、在谷歌开发者工具中,如果总是搜索不到想要的某些字段,不清楚这些字段到底是从哪里来的,建议用抓包工具抓下来后再去搜索内容,因为在谷歌开发者工具里,即便有些url包含某些字段,你在搜索的时候就是搜不到.

 

29、多尝试从0开始进行网页的分析,有可能存在多种api,说不定另一种api没有加密。

30、一定要相信、一定要相信、一定要相信、我们的代码肯定能模拟出网页中的response。

 

本文将持续更新!


如果这些经验对你有帮助,点个赞再走呀。

更多粉丝可见的文章,欢迎关注。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值