1 引言 数月前写过某网站(请原谅我的掩耳盗铃)的爬虫,这两天需要重新采集一次,用的是scrapy-redis框架,本以为二次爬取可以轻松完成的,可没想到爬虫启动没几秒,出现了大堆的重试提示,心里顿时就咯噔一下,悠闲时光估计要结束了. 仔细分析后,发现是获取店铺列表的请求出现问题,通过浏览器抓包,发现请求头参数中相比之前多了一个X-Shard和x-uab参数,如下图所示: X-Shard倒是没什么问题,一看就是兴趣点的经纬度,但x-uab看过之后就让人心里苦了,js加密啊,只能去逆向解密了. 2…
JS逆向之浏览器补环境详解 "补浏览器环境"是JS逆向者升职加薪的必备技能,也是工作中不可避免的操作. 为了让大家彻底搞懂 "补浏览器环境"的缘由及原理,本文将从以下四个部分进行描述: 什么是补环境? 为什么要补环境? 怎么补环境? 补环境实战 补环境框架成品源码 一:什么是 "补浏览器环境"? 浏览器环境: 是指 JS代码在浏览器中的运行时环境,它包括V8自动构建的对象(即ECMAScript的内容,如Date.Array),浏览器(内置)传递…
C语言趣味程序设计编程百例精解 C/C++语言经典.实用.趣味程序设计编程百例精解(1)  https://wenku.baidu.com/view/b9f683c08bd63186bcebbc3c.html https://blog.csdn.net/nigulasi_dawei/article/details/72795786 1.绘制余弦曲线 在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线 *问题分析与算法设计 如果在程序中使用数组,这个问题十分简单.但若规定不能使用数组,问题…
前言 本文意在记录,在爬虫过程中,我首次遇到Protobuf时的一系列问题和解决问题的思路. 文章编写遵循当时工作的思路,优点:非常详细,缺点:文字冗长,描述不准确 protobuf用在前后端传输,在一定程度节约了带宽,也为爬虫工程师增加了工作量. 遇见Protobuf 一拿到网站,F12查看是否有相关数据的请求接口 ok! 接口找到了,看下请求参数吧! emmm~~ 为啥请求参数是乱码? 平时见着的都是这个样子滴?可以直接看到参数! 哎,咱们这初出茅庐的菜鸟,乖乖搜搜,看看有没有前辈们写过相关…
今天准备爬取网页时,遇到『JS逆向AES加密』反爬.比如这样的: 在发送请求获取数据时,需要用到参数params和encSecKey,但是这两个参数经过JS逆向AES加密而来. 既然遇到了这个情况,那么辰哥就教大家如何去解决这类反爬(JS逆向AES加密) 01 网页分析 在开始分析JS逆向AES加密之前,先简单介绍一下要爬取的内容:下载某抑云音乐.其中获取歌曲的真实播放地址m4a的过程涉及到JS逆向AES加密. 点击播放,在浏览器中查看抓取到的数据包,如下图所示: 查看响应数据: 可以看到在ur…
JS逆向之补环境过瑞数详解 "瑞数" 是逆向路上的一座大山,是许多JS逆向者绕不开的一堵围墙,也是跳槽简历上的一个亮点,我们必须得在下次跳槽前攻克它!! 好在现在网上有很多讲解瑞数相关的文章,贴心的一步一步教我们去分析瑞数流程,分析如何去扣瑞数逻辑,企图以此教会我们 (手动狗头).却鲜有文章详细去讲解如何通过纯补环境的方式过瑞数.今天,它来了! 为了让大家彻底搞定瑞数这个老大哥,本文将从以下四个部分进行描述: rs的流程逻辑 浅谈扣代码过rs 详解补环境过rs 扣代码与补环境对比 弯道…
前言 在项目中,无论是维护自己的代码,还是重构他人的项目代码,看到层层嵌套,异常冗余的某个function,那时我们的内心肯定是奔溃的! 在jquery1.5版本之前,如果我们某个操作需要多个ajax异步请求成功后执行,只能在前一个ajax成功的回调函数中接着发送ajax请求,这样一来,不光代码的可读性变得异常差,而且也失去了异步的意义. jquery开发者果然在1.5版本后引入了deferred延迟对象.而jquery.ajax也基于它迎来了巨变,我们先对比下有哪些区别. 传统ajax和现代a…
关于正则表达式: 表1.常用的元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 表2.常用的限定符 代码/语法 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 表3.常用的反义代码 代码/语法 说明 \W 匹配任意不是字母,数字,下划线,汉字的字符 \S…
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象 ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 我们先来看看它的使用方法: const promise = new Promise(function(resolve, reject) { // ... some code 这里写异步操作代码 ajax(api1,function(…
观察者(Observer)模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主体对象的状态变化会通知所有观察者对象.观察者模式又叫做发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)模式. 这种模式在我们实际生活中并不鲜见,比如订牛奶.订报纸.我们订阅了某报纸之后,一旦报纸有新版出来,就会送到我们报箱或手中,去过取消订阅,那么也就再也收不到了.有了互联…