建议先看片尾
文件操作基础
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 这种键值对的格式来的字符串
- 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)
线程池
多线程加快速度
微信小程序
官方文档不香?
https://developers.weixin.qq.com/miniprogram/dev/devtools/debug.html
干点脏活(扒微信小程序源码)
控制台入门
https://www.pianshen.com/article/15161573557/
无限debug
手段罗列
https://blog.csdn.net/Sheation/article/details/112727599
啪一下我把无限debug过了
刷新下之后,再重复跳过几个debug就过了
这是一个定时器无限debugger,如果两次时间差大于100,那么就会一直让我们处于debugger状态。
当遇到这种反调试的手法时,可在进入debugger状态后,在console中输入以下代码,以此跳过。
for (var i = 1; i < 99999; i++)window.clearInterval(i);
1
对没错,它会报错,但是它不会debug,嗯是的
- hook(此处没有,按照其他博客文章截图为例)
- 改变判断条件
f8一下,就跳转到下一个点了
- 禁止断点
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状态码,无法获取目标数据。
字体加密
字体库和参数偏移
验证码
各种,处理方法有:
- 图像处理训练
- 调接口,花钱找专业的
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
东西很少很少,以后会整理一些东西放出来的,希望大家关注