和爬虫工程师总结-那些培训视频不讲的爬虫进阶教程


建议先看片尾

文件操作基础

os模块

py正则

re模块

requests库

可以学学urllib(requests基于urllib写的)

https://www.cnblogs.com/yhll/p/9760494.html

细碎知识点

b = a.split("_")[1]#从第0个开始,_分割
s = "swww"
c = "aaaaaaaaaa{s}bbb"#字符串拼接
#字符编码问题解决技巧,例如:出错尝试二次编码

保持登陆姿态

import requests

session = requests.session()
res = session.get()#类似于requests

防盗链

通过接收父页面的链接来判断链接的来源(上一级,通常是用来防止其他网站复制抄袭)

refer:通过head参数里的refer来检查

通过对请求链接进行处理

X-Forwarded-For

客户端请求伪造

json和字典的区别

json 本质上还是字符串,只是按 key:value 这种键值对的格式来的字符串

img

  • Python开发中字典和 json的区别?字典是一种数据结构,json 是一种数据的表现形式,字典的 key 值只 要是能 hash 的就行,json 的必须是字符串。
  • Python开发中字典和 json的概念区别:
      一、字典
      字典是一种数据结构,而json是一种数据格式,格式就会有一些形式上的限制,比如json的格式要求必须且只能使用双引号作为key或者值的边界符号(值如果是数字可以不用加双引号),不能使用单引号,用单引号或者不用引号会导致读取数据错误,而且“key”必须使用边界符(双引号),但字典就无所谓了,可以使用单引号,也可以使用双引号。
      dict是一个完整的数据结构,是对Hash Table这一数据结构的一种实现,是一套从存储到提取都封装好了的方案。它使用内置的哈希函数来规划key对应value的存储位置,从而获得O(1)的数据读取速度。
      二、json
      json是JavaScript Object Notation的首字母缩写,字面的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数据格式对象,目前这种数据格式比较流行,逐渐替换掉了传统的xml数据格式, 前端使用ajax的时候后台返回该前端的数据格式就是json格式的。
      json是一种数据格式,是纯字符串。可以被解析成Python的dict或者其他形式。
      三、json和dict区别对比
      json的key只能是字符串,python的dict可以是任何可hash对象(hashtable type);
      json的key可以是有序、重复的;dict的key不可以重复。
      json的value只能是字符串、浮点数、布尔值或者null,或者它们构成的数组或者对象。
      json任意key存在默认值undefined,dict默认没有默认值;
      json访问方式可以是[],也可以是.,遍历方式分in、of;dict的value仅可以下标访问。
      json的字符串强制双引号,dict字符串可以单引号、双引号;
      dict可以嵌套tuple,json里只有数组。
      json:true、false、null
      python:True、False、None
      json中文必须是unicode编码,如"\u6211".
      json的类型是字符串,字典的类型是字典。
      四、hashtable
      一个对象当其声明周期内的hash值不发生改变,而且可以跟其他对象进行比较时,这个对象就是hashtable的。
      1、python中的基本类型都是Hashtable,如str、bytes、数字类型、tuple等;
      2、用户自定义的类型默认都是hashtable,因为它们的hash值就是id()值;
      3、frozenset始终都是hashtable的,因为它们所有的项目都是被定义成hashtable的;
      4、只有当tuple内的所有项都是hashtable的时候,tuple才是hashtable;

编码

encoding、utf-8、gbk、charset等

代理(入狱基础)

pro = {
    "http":"http://*********"
}
res = requests.get(url,proxies = pro)

线程池

多线程加快速度

微信小程序

image-20210531105259734

官方文档不香?

https://developers.weixin.qq.com/miniprogram/dev/devtools/debug.html

https://blog.csdn.net/qq_38219875/article/details/106931219?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6.control

干点脏活(扒微信小程序源码)

https://blog.csdn.net/qq_30548105/article/details/84998218?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-17.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-17.control

https://blog.csdn.net/chengzailushang/article/details/113364653?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-4&spm=1001.2101.3001.4242

控制台入门

https://www.pianshen.com/article/15161573557/

https://blog.csdn.net/weixin_42359436/article/details/108224120?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-3.control

无限debug

手段罗列

https://blog.csdn.net/Sheation/article/details/112727599

啪一下我把无限debug过了

image-20210531095522779

image-20210531095606496

image-20210531095648611

刷新下之后,再重复跳过几个debug就过了

这是一个定时器无限debugger,如果两次时间差大于100,那么就会一直让我们处于debugger状态。

当遇到这种反调试的手法时,可在进入debugger状态后,在console中输入以下代码,以此跳过。

for (var i = 1; i < 99999; i++)window.clearInterval(i);
1

image-20210531101114170

对没错,它会报错,但是它不会debug,嗯是的

  1. hook(此处没有,按照其他博客文章截图为例)

image-20210531102918945

image-20210531102918945

  1. 改变判断条件

image-20210531103617308

image-20210531103632168
f8一下,就跳转到下一个点了

  1. 禁止断点

image-20210531103923334

f8下就好,但是不建议使用,因为此功能会同步取消打断点,后期下断埋下隐患

瑞数

由于加密Js代码每次请求变量名都不一样,在线分析会很不方便,所以需要将文件离线下载到本地,再进行分析。

方法1:硬搞JS。这条路我踩了两个版本的瑞数,过程极其艰难。可谓是一锤更比一锤狠,为了头发我果断放弃。
方法2:考虑到浏览器。抹掉canvas、webgl 和audio等浏览器指纹+鼠标滑动点击,浏览器开一个服务,爬虫直接用就行了,脑海中这个方案基本完美。
方法3:js对抗。借助chrome浏览器注入进去所有被监控的东西,加上干扰。
方法4:去申请瑞数的试用版,还原源码。
方法5:利用大量R鸡儿。就正常去爬,提升他们反爬的误伤率,假如他们自己都访问不了自家网站,是不是有可能下线瑞数反爬。


例子

我采用了第五种+第三种,大量的服务端供我使用,目前低成本采集。
方法1:假如你扣出来js,为了速度快你用nodjs起个服务,假如代码里面有一些删文件的操作(浏览器不能执行,nodejs可以触发的代码),你哭吧。
方法2:我使用了miniblink这个所谓打包后8M的浏览器,实际上是20多M,可我只需要能打开网页,能ajax访问就行了。于是乎找了老版本去搞。
方法3:emm,我能说具体的,正在用呢。看思路就能自己实现。
方法4:你自测吧,我没成功,对方非要来公司聊。
方法5:你自己找渠道买鸡儿,就让他看到一贼正常的客户在访问,他能咋办。

ob混淆

jsvm

wasm

MD5 ars rsa base64

设计密码学知识,有的请求会加密后提交,要通过js代码解决加密问题

严格意义base之类只能说编码方式,不算加密

常识+理解+专业知识+js调试

app

逆向,反编译,接口提取等

AAEncode混淆

JSFunck混淆

JJEncode混淆

eavl混淆

加速乐

第一次访问时会返回一段加密的js,检查浏览器环境,符合预设才会进一步请求其他资源文件,不符合直接返回521状态码。登录账号后,服务器端返回cookie,包括获取目标数据的关键cookie键jsl_clearance,每二三十分钟后jsl_clearance失效,若用户有其他发起请求数据的操作,本地加密js文件会请求服务器端刷新__jsl_clearance,没刷新时返回521状态码,无法获取目标数据。

字体加密

字体库和参数偏移

验证码

各种,处理方法有:

  1. 图像处理训练
  2. 调接口,花钱找专业的

cookie参数生成加密

追生成就完事了

ua反爬

基础部分,设置ua头

接口返回的数据加密

ip138Ajax接口请求返回值需解密js代码

请求参数加密

通过对特定请求参数进行加密变换,例如base64,MD5加密后传输

往往会因为传输安全问题进行加密再提交,例如银行系统有时会采用MD5加密后用salt再进行MD5包裹,加密充分后传输

验证码

验证码又分为普通的字符数字 滑块 点选

还有就是一些验证码的厂商 比如数美 极验 易盾 谷歌 阿里

cookie绑定常登陆ip

字面意思

自动化工具

selenium

fiddle、burp

中间抓包

js基础

会看js代码逻辑、吧

js在py运行

js2py

execjs

webpack

打包好,下一步本地分析,有些操作往往都是在本地调试的,不为啥,,,方便

本地分析代码

例如hubuilder,sublime3,vscode等

最后

本人在出学爬虫之后总感觉差点意思,好多东西爬不下来的,我一个朋友需要某些睡不着觉网站内容时,参数给全还是不返回东西,很恼火直到后来,才发现,除了大型项目需要的数据库和框架,反爬和反反爬更令人振奋,做web安全时也会有知识点的重合。

所以这篇文章交给你思路,具体你来学,帮你少踩坑。

感谢下十一大佬(在职爬虫工程师),比较低调,好多思路都是他帮我想的,平时也指导了我很多东西;还有早睡早起大哥,帮我审核文章,两位都是亦师亦友。

文章比较杂,思路比较多,后期会补充,联系教父再发一篇文章的

个人博客:

www.cnblogs.com/l1j1ng

东西很少很少,以后会整理一些东西放出来的,希望大家关注


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM