【学习心得】webpack技术在爬虫逆向中的应用_webpack加载器模块爬虫

        l: !1, // 布尔值,初试为false,用来表示当前模块是否被加载
        exports: {}  // 空对象,用于讲模块导出,存储
    };
    // 执行函数里面的代码
    return e[t].call(a.exports, a, a.exports, n),
        a.l = !0,
        a.exports
}
n.m = e  // n.m 用来存所有的模块
n(2)     // 执行当前选中的模块,下标2就是第三个模块

}([
function () {…},
function () {…},
function () {…},
function () {…},
])


### (3)模块化


        比如下面代码中有三个模块,他们其实就是三个函数,假设这三个模块都有着不同的功能,这里演示代码中显示的是打印不同字符。



function ModuleA() {console.log(“a”)}
function ModuleB() {console.log(“b”)}
function ModuleC() {console.log(“c”)}


        但如果你的写的功能模块有几百上千个,那么这样的书写方式必须放在同一个JS文件中就会非常臃肿,于是出现了这样的代码结构:



!function(i) {
function n(t) {
return i[t].call(a, b, c, d)
}
}([
function(t, e, n) {},
function(t, e, r) {},
function(t, e, o) {},
function(t, e) {},
]);


        由于在扣JS加密代码时会经常遇到,所以理解这种语法对于逆向来说是非常重要的。


这种代码组织相当于进行了模块化编程,因此被称为 webpack。上面的代码看起来很费劲,其中的一个重要原因就是函数的参数和函数名都是简单的字母没有含义,都不知道这是干什么。于是我们可以写成下面这种方式便于理解:



!function (allModule) {

// 定义执行模块的函数
function useModule(whichModule) {
    // 用call方法来执行函数
    allModule[whichModule].call(null, "hello world!");
}
useModule(0)  // 这里指定加载哪一个模块

}([
function ModuleA(param) {console.log(“A” + param)}, // 用数组装所有的模块,这是第一个
function ModuleB(param) {console.log(“B” + param)},
function ModuleC(param) {console.log(“C” + param)},
]);


## 二、技术拆解


### (1)JS的自执行函数


        IIFE 全称 Immediately-invoked Function Expressions,译为立即调用函数表达式,也称为自执行函数、立即执行函数、自执行匿名函数等,IIFE 是一种语法,这种模式本质上就是函数表达式(命名的或者匿名的)在创建后立即执行。当函数变成立即执行的函数表达式时,表达式中的变量不能从外部访问。IIFE 主要用来隔离作用域,避免污染。它长这个样子(我只介绍最常见的形式):



// 第一种形式:用感叹号表示
!function () {
console.log(“I AM IIFE”)
};

!function () {
console.log(A)
}(A); // 后面紧跟的小括号里面可以传入参数

// 第二种形式:用括号表示
(function () {
console.log(“I AM IIFE”)
}());

(() => {
console.log(“I AM IIFE”)
})();


### (2)call方法apply方法


        JavaScript 中的 call() 和 apply() 方法都是函数对象(Function.prototype)上的方法,它们的主要功能是改变函数调用时的上下文环境(即函数内部 this 的指向),同时允许你传递参数给该函数。


下面是call方法的使用例子:



function sayHello(name) {
console.log('Hello, ’ + this.name + ', ’ + name);
}

let user = { name: ‘John’ };
sayHello.call(user, ‘Doe’); // 输出 “Hello, John, Doe”


下面是apply方法的使用例子:



function sum(a, b) {
return a + b;
}

let numbers = [3, 5];
let result = sum.apply(null, numbers); // 输出 8,等同于 sum(3, 5)


        总结起来就是,call和apply第一个参数都是函数运行时的上下文对象thisArg。后面的参数不同,对于call来说,参数是一个个传入;对于apply来说,参数是通过一个数组传入。


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/9e75e6091846b019ec55a98b5a92b0f7.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/6b78223ff566ab938cd1f6d3f4c968f6.png)
![img](https://img-blog.csdnimg.cn/img_convert/acf6d25a871fdd813a6d3268684d42ac.png)
![img](https://img-blog.csdnimg.cn/img_convert/8c3f0f035394b08b17d52134c5d264dd.png)
![img](https://img-blog.csdnimg.cn/img_convert/43532f9c80dcbedb972b8beb6e7ca456.png)
![img](https://img-blog.csdnimg.cn/img_convert/298b4c241159446f358ff891e7d12114.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)**
![img](https://img-blog.csdnimg.cn/img_convert/dfd17d259a87f8c4d6809961c41889b7.png)

#### 结束  

一次完整的面试流程就是这样啦,小编综合了腾讯的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析,分享给小伙伴们,有没有需要的小伙伴们都去领取!



![](https://img-blog.csdnimg.cn/img_convert/45f2869b91b538dd3bb3290ba13bc806.png)



**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/65ee4b94427e9b2f9aab39c866a7218f.png)

13bc806.png)



**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-aJp1V6k6-1712879266088)]

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务负责。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值