粉丝3.1万获赞13.1万

然后我们今天选择的话是,呃,关于这个耳机的,就是手机的蓝牙耳机的一个商品数据的一个采集,主要把这些商品数据给它获取出来啊, 然后我们要去采集这些数据内容的话,我们,嗯还是按照一样的,就是爬虫实现的一个基本流程给大家去进行一个讲解啊, 我们爬虫实现的基本流程,嗯,这个流程的话大概是分为两步啊,第一个的话是数据来源分析,第二个呢是代码的实现步骤, 事情布置啊,分为这两个大类啊,然后明确需求的数据来源分析里面的话分为明确需求和我们的抓包分析。代码布置的话分为发送请求啊,发送请求获取数据、 解析数据,还有一个保存数据啊,这样的话就是我们基本的一个步骤了,嗯,首先的话我们这个明确需求就是明确采集的网站和数据内容 以及数据内容。咱们网址的话就是,呃,淘宝商品嘛,打搜随便搜索也随意啊,任意搜索一个商品啊,任意搜索一个商品,呃,然后数据的话就是我们的一个商品信息, ok, 然后第二步的话抓包,抓包的话就是通过浏览器的开发者工具分析对应的数据位置, ok, 这里的话它分为三步啊,第一个打开开发者工具,第二个刷新网页,第三个通过关键字搜索,呃,查询对应的数据接口 啊,这是我们的基本步骤啊,我们打开这个开发者工具的话,就直接在浏览器的页面当中按一个 f 十二就行了,我们来抓爆一下,按个 f 十二,然后我们刷新 让整个网站重新加载一遍啊,啊,记得刷新一下,刷新完了之后的话我们直接去搜, 搜的话就是你需要什么数据就搜什么需要这个标题。对啊,那我们就直接你要商品数据的话,这个标题肯定是要的,所以我们就直接搜这个标题就行了啊,比如说这个什么唐麦啊, q 六,呃,解压 可以按啊,就搜一部分就可以了啊,搜一部分啊,搜一部分就可以了,然后我们回车打,回车之后的话你可以看到,哎,这边的话就会出现我们的一个数据接口,打就点这个搜索按钮啊,这句话是搜索按钮, 然后第二步输入搜索内容回车,但我们所搜的话就是它的标题啊,就以标题当中的一部分内容去搜就可以了。 ok, 打印标题中的啊,一部分数据 进行搜索,那不用不用全部复制啊,复制一部分就可以了,没必要复制那么多。然后下面这里的话,他就会告诉你我们想要的数据他是在哪个接口里面啊,这样的话就直接找到了数据所对应的一个位置了。 那他的一个数据的话,就他的一个啊,数据内容像他的一些标题价格,还有他的一些地区啊,地区销量的一些情况等等,反正在这里面都是有的,还有他的店铺名字, 那都是在在哪里呢?在这个 data 下面的哪一个这个啊?这个里面,这里面的话就是我们相应的一个商品数据信息 哇,就找到了啊,你知道数据在这里之后的话,我们看标图啊,请求的网址就是这个,这个话就它的一个接口啊,比较长,我就写个短链接,它的一个数据包的啊,数据接口 就这个,这个话就他的一个接口链接很长啊,像问号后面的话,这些都是他的一些常用参数啊,就比较多。然后是一个 get 请求, 他的一些请求头的一些参数内容啊,也在这里面,像他的 cookie 啊的防盗链啊,然后我们的 u a 啊都在这里。这么长,对,因为他的一个参数会比较多嘛,对啊,参数会比较多。 ok, 好, 那我们啊既然找到了数据所在的位置之后啊,就就就按照这个三个步骤去找就行了,就按照这三个步骤去分析就能找到这个位置, 找到之后的话我们去写代码,就按照发送获取解析和保存的一个基本步骤嘛,发送请求的话,它就是模拟浏览器 对于我们的 u l 地址发送请求,获取数据的话,那就是获取服务器啊,返回的响应。数据 解析呢,那就是提取我们需要的数据内容 保存,那就把提取出来的数据 保存到本地文件中,那就可以了。哇,这是我们整体的一个流程啊, 然后大家再等一下,我们就按照这个步骤啊,按照这个步骤去写我们的代码,如果说大家有不懂的啊,对于代码的话有不理解不清楚的话,你可以直接把你的问题说出来,那这样的话就会给大家去进行一个解答好不好? 嗯,如果说你们不提问的话,就默认大家都听懂了啊。第一个啊,我们的一个发送请求 访问请求的话,我们首先做一个模拟浏览器,这个模拟浏览器的话啊,我们就直接使用什么呢?使用这个请求头里面的参数就可以了。我们就用什么呢?用 cookie 啊,就把它的 cookie 啊复制过来,然后还有它的这个。呃,复位防盗链,还有它的 u a 啊,把这三个拿过来就行了。放到一个什么呢?放到一个字典里面啊,我们复制一份。 嗯,就留我们的一个 cookie, 瑞凤啊,还有我们的 u a, 就 加这三个就行了。好,我们的一个请求网址 y l 啊,这个 y l 的 话不用复制那么长啊,我们给它分开写啊,给它分开写。打问号前面的话作为它的链接啊,就是它的一个链接地址 啊,这是他的链接地址,然后问号后面的话啊,就是他的一个长行参数。长行参数的话我们也单独用一个什么呢?也单独用一个字典去接收啊,他的这个长行参数我们直接给他复制过来。复制 然后呢?粘贴啊,这个的话就是它的一个查询参数啊。查询参数然后发送请求的话,我们需要导入一个什么?导入数据请求的一个模块 import, 一个 request 啊,如果说直接全部复制长的可以吗?可以啊,但是,呃,你不好去分析他的一些,你像复制全部复制这么长的话,你看他的一些参数的话,看的不是很舒服啊,但是你分开写的话,他每一个参数是什么都是比较明显的,那每一个参数对应的是什么东西?就是看的比较清楚啊。 那如果说你是直接复制这么一长串的话,你看起来是不是特别密密麻麻的,就不太好看啊?不太好看, 我们发送请求 request, 点上一个概率请求约样,把自己参数全部传进去啊,我们的参数,我们的链接,我们的请求头啊,请求头伪装的一些内容全部给它传进去,再用一个变量名去接收就可以了。 好吧,这个话就是我们发送请求的一个代码内容。好,关于这个发送请求的话,我们十八行到四十四行代码有没有问题?有哪行有哪一部分代码需要问的啊?没有的话扣个六啊,有疑问的话扣个五。好吧,没问题,扣六,有疑问的话扣五。 然后你可以看一下哪一哪一部分代码,哪一行代码是需要提问的,有没有, 没有的话那我们第二步啊,获取数据。 呃,获取数据的话,我们这个地方只能获取它的一个文本啊,没办法获取它的一个节省,因为它这边返回的一个数据的话,它不是一个标准的节省数据格式 啊,它不是一个标准的啊,呃,它是有这种有一个小括号括起来的,对不对?那这个就是非标准的计算数据格式,所以呢?嗯,在我们获取数据的时候只能获取响应的一个文本数据, text 等于 response, 点 text, 然后 print 打印一下, 我们打印输出,看一下我们这个数据是否有返回右键运行, 那这边的话就是调用成功。对啊,那我们相关的一个数据的话就出来了啊,相关这个数据就出来了 啊,出来之后的话,哎,我们就可以把呢,我就相当于我现在是已经把整个响应数据就全部拿到了啊,整个响应数据都拿到了,但是我们要的话只是商品的一部分信息啊,所以得去做一个解析 啊,所以得去解析数据,把我们所需要的内容给它取出来,然后解析数据的话,呃,这边我所选择的话,就先把什么呢?先把它中间这个小括号里面的接收数据给它匹配出来 啊,把这个括号里面的数据给它匹配出来,匹配出来之后的话我们再给它转成啊接收数据,然后再通过字典取值的方法去取啊。所以我们要取数据的话,我们先导入正则, 正则表达式模块 import r e。 导入进来之后的话,我们提取什么呢?提取接收数据啊, 啊,把这些数据给它取出来。 text 接收 r e, 点上一个 file, 从哪里匹配?从这里啊? 从这个地方开始匹配,然后这个括号的话给它,嗯,转移掉啊,转移掉,转移掉,然后然后后面的啊,从这括号后面的所有内容我们都要啊,就是用个点心代替,就相当于表示什么呢?表示从这个括号开始到后面的所有的内容我们全部都要, 然后这个数据从哪里匹配的?是不是从这个 text 里面匹配的啊?从这个 text 里面啊,去匹配,从什么呢?从这个六小括号开始,后面内容全部都要啊,然后匹配出来之后,他会返回一个列表,返回列表,那我们就取个零, 取个零就是根据列表所用位置取值啊,把它取出来,取出来之后的话,最后的这个反括号啊,我们就不要,就直接写个切片啊, 负一啊,这样的话我们最最后这个反馈就不要,那这样的话我们就得到了这个键数据啊,得到这个键数据得到之后的话,哎,我们再给他转成什么呢?字典数据这里拿到的话是一个字母串啊,然后再给他转成字典。转字典的话我们要导入一个矩阵的模块 import 节省,那就是接生 data 等于什么呢?接生点上 lots, 然后我们 text 杠节省,然后 print 一下 打印啊,那这边的话就不打印了啊,来运行。 那这样的话是不是它就变成了一个什么呢?变成了我们这种字典的一个数据了,变成字典数据了。哇,这一部分的话啊,有没有问题想问的?关于我们的五十一行到五十七行有没有哪个地方需要提问的? 有没有没有是吧?有问题就问啊,没有的话我们就过了。 然后我们拿到这个数据之后的话,那我们接下来就按照字典取值的方式嘛,把什么呢?我们想要的数据的话都是在这一个里面,在这个列表里面,所以我们就通过字典取值的方式啊。 提取什么呢?提取商品信息所在的列表啊,所在列表所在列表的话就哪个就这个在哪个里面?在这个 data 里面。 接生 data 取什么呢?取 data data 下面的这个。 呃采集数据之前的话需要登录吗?啊?需要登录啊,你不登录的话你看不到数据啊?淘宝的话好像不登录是看不到数据的。对,但是你你就加上什么呢?登录账号的 cookie 就 可以了, 好吧。呃,像淘宝的话啊。嗯,大家的问题就是采集之前需要登录嘛?之前啊,需要登录嘛? 啊?这个的话其实要根据网站,根据网站情况,就比如说我们基本啊今晚的案例的话就是淘宝吗?淘宝的话是需要登录的啊。需要登录。因为你不登录的话啊不登录是看不到数据的。 不登录账号啊,查看啊。呃看不到数据信息的啊,是看不到的啊。如果说你能够不登录能够看到的话那你可以不登录。好吧。不登录啊。所以说我们在采集的时候啊采集的时候需要携带什么呢?登录啊账号的一个 cookie 啊。进行一个什么呢请求啊。点心行不行?点心问行不行?点心问的话啊可能会有问题。那就关于我们匹配的话使用点心问什么行不行 啊?这个话是可能会出问题啊可能会出现问题。 那可能会出现问题。为什么呢?给大家解释一下为什么我们刚刚的话为什么要在这里地?在这个地方的话需要用到一个点心啊?不是用一个点心问。呃这里的话我得需要需要新建一个文件给大家去做一个,做一个反例啊, 做一个反面的例子啊,比如说我们复制一份 我们刚刚的话是这样子的,对不对?哎。啊我们的一个。 net 对 应的什么呢?对应的木木子,然后他的一个微信, 对应的 python 幺零零幺零。 ok 啊。可能我们常规如果说是这样子的一个情况的话啊,如果说我们的数据是这种情况的话是没有任何问题的啊是没有任何问题的 啊是没有任何问题。就是你用点心的话是可以的啊就是你用点心问的话是可以的。比如说我们把这个复制过来 import, 哎对吧?在这里的话你用一个什么呢?用一个这个点心问是完全是 ok 的 啊?完全是 ok 的。 那我们这里用个 text 给你看一下啊。 那如果说是这种情况的话是 ok 的, 然后的话你需要考虑到一个点啊,考虑到什么点呢?就因为我们这些商品标题,如果说它中间这些商品标题里面带了一个括号的话,你用点心问的话就会出问题啊,就比如说我的数据在这个地方啊,多了一个什么呢? 啊?多了一个女,这里多了一个括号,那你再来看一下这个数据它是不是会有问题?是不是会有问题? 是不是啊?他就相当于什么呢?从第一个括号开始到第二个第一个反括号结束,就他只会匹配到这一段数据,他只会匹配到这一部分数据, 是不是?就所以说你要防止什么呢?防止万一它里面中间某一个地方是出现了一个反括号呢?是加了一个括号的呢?对不对?所以说你要考虑到这个情况啊,考虑这种情况。所以我们这个地方说了,你如果说使用这个点心的话可能会出现这种问题啊,会出现这种问题,就是会导致一个数据匹配不全 啊,可能啊,会导致数据匹配不全, 就这么个原因。所以我们会选择什么呢啊?会选择直接啊,直接通过我们的一个点心,就相当于他是会把匹配到最后, 对吧?从这个括号到到最后全部拿到,但他是不是多了一个反括号?所以我们再做了一个什么呢?做了一个切片啊,做了一个切片,把这个反括号给他删掉 啊,给他删掉,懂了吧?啊?所以说在这个地方的话为什么得用点心的原因在这里啊?就是因为考虑到如果说你用点心问的话他可能会存在一些匹配不全的情况啊,好吧,还有其他问题吗? 还有没有其他的一些疑问想问的? ok 啊,那我们拿到这个回到这里啊,回到我们这边来啊,我们这边的话是通过字典取值嘛,然后提取到商品信息所在的一个列表啊,取到这个列表之后的话我们直接通过负循环便利 提取列表里面的元素。 for index。 in 什么呢? in 它啊? print 打印一下这个 index 啊,这样的话就相当于什么呢?我们把这个商品数据每一条信息就全部给它拿出来了, 那就全部每一条数据就单独给它拎出来了啊,单独拎出来的话它这个 index 的 话它还是一个什么呢?还是一个这种字典的一个形式,还是这个字典的一个形式对不对啊?所以我们就在这个循环当中啊,在循环中 提取具体的数据信息保存到字典中,我们创建一个字典啊,给它进行写入,比如说标题, 标题我们看一下它是在哪个地方啊?我们在这边看吧看一下。嗯首先这边没什么数据啊,这个热商榜,呃,这什么热销榜?第二名,如果说你要的话可以取一下,我们就拿一些基本的数据就行了。 嗯它的 id 啊,这个是它的 id, id 的 话我们还是拿一下吧。商品 id 啊, 呐这个的话是商品 id, 然后这个是店铺, 店铺的一个名字,然后这个是价格啊,价格 价格。嗯还有呢?还有他的城市啊,城市。 嗯,还有呢?我们的一个销量就是我们看到什么就取什么,这个是销量啊,然后这个是标题啊,这个是标题抬头, 这个是标题。基本的数据的话就这些啊,基本数据的话就就这些东西,你就看到什么你就取什么就行了,根据冒号左边取,冒号右边啊,其他东西你要的话你就自己去取了。好吧,我就拿到这些最基本的信息, 然后这个标题里面的话是含有这个标签的啊,这个标签的话我们就手动通过什么呢?通过 replace 去替换了啊? 那通过这个 replace 给它进行一个简单替换。还有这个 span 标签,看到没有,它是有这个 span 标签的,我们就直接给它替换掉。但我们也可以直接用正则啊,直接用正则给它替换的话也行啊, 但我们用最简单的嘛,就字幕窗替换的一个方法。还有的话就是这一个城市啊, 那这个城市的话,我们是,呃有这个数据的吧,对不对?这个城市啊,那这里有个我们的一个城市数据,城市数据的话它有一个地区,有一个,有个城市有一个省份,嗯,所以我们可以给它稍微区分一下啊。啊? 稍微区分一下,那这个的话是我们的一个城市用个 l l 音符啊,等于它点上一个什么呢? split 分 割啊,以这个空格去作为一个分割当,因为它有一些的话是有省份,有些是没有省份的啊,湖南长沙你可以看到啊, 有些是有地区,有些是没有地,就是没有城市的,你看这个是湖北,这个是湖,湖南长沙他是有两个的。对啊,所以我们在这个地方的话需要判断一下,如果说 啊,如果说你给他分割之后的话,他返回的是两个元素,那就说明他是有我们的一个省份的啊,有我们的一个省份的啊,省份的话我们就是 啊,用个 l 吧,然后我们的一个城市的话就用个 ct 啊,就这里变量名的话就无所谓了,大家知道就行了。这是个 e 啊,这个的话就是省份啊,然后这个的话就是我们的一个城市, ok 啊,否则的话如果说他没有两个,对吧?他,否则只有一个嘛?没有两个,不是两个就是一个啊,一个的话他就相当于只有省份 啊。城市的话那就是未知的啊,就是未知的就不知道它是。呃,就比如说像这个,你不太清楚它是湖北哪个城市的,就是未知的。对,所以我们给它拆分一下。呃,城市的话就是我们的一个 city, 然后省份的话就是我们的 l 啊,这个编名,编名无所谓的,咱们来打印一下这个 d i t 啊,打印这个 d i t 的 话啊,它等一下应该会报错的,等一下的话应该会报错啊,来我们运行一下。 哎。啊?报错了,看到没有啊?在某个地方啊,他是会缺少了一个什么呢?嗯,缺少了一个城市数据啊,在某一条数据当中他是缺少了这个城市数据的,看到没有, 对不对啊?缺少了这个城市的一个数据信息啊?嗯,我看一下他是不是有哪个地方是是没有城市数据的。 这句话是少了一个城市数据信息啊?那我们就这样子判断啊,我们这样子去做处理啊,就我们可以来看一下。嗯,做一个什么呢?做一个异常补货 try 啊,做一个 try 的 异常补货 s 我 们的 e 啊, print 我 们的 e 啊,看一下报错信息啊,报错信息看到之后的话我们再打印一下它那个数据啊,导入一个格式化输出的模块, 格式化输出的一个模块,因为不然我们不太清楚它是具体哪一条数据出现的报错,对不对?所以我们要去做处理的话,我们就要得知道它具体是哪一条信息出现了一个报错,然后我们给它退出一下来运行。 ok 啊?在这个地方出现了一个问题啊,这个数据它是一个什么东西呢?对啊,它是说没有这个标题,对,没有这个玩意,就是没有我们的一个。呃,那个什么 啊?就这个嘛,对不对?我们省份数据是没有的啊?为什么会没有呢?因为他在这个地方返回的这一部分数据,他是一个什么什么?非常不满意啊,非常满意。对本次搜索体验满意吗?啊?你觉得哪里不好?对啊,错误提示,他这个东西是什么呢?这个东西其实就是我们页面的一个调查 啊,这是在我们的页面当中,你看他会中间突然多加了一条这个玩意啊,多加了一个这个玩意的一个数据出来, 是不是啊?多加了一个这个东西啊?所以这玩意的话你就不用管他啊,不用管他,我们直接给他跳过就行了,对吧?像这种情况的话我们就直接干嘛呢啊?最简单的来说直接给他跳过啊,做这个异常补货,直接给他跳,跳过就行了啊,你不用管他 啊,也不用管他的一个 bug, 对 吧?就直接这样跳过就行了啊,做一个简单的异常补货。那这样的话我们的数据是不是就都拿到了? 因为这条数据本来就不是我们想要的,他只是一个满意度调查而已啊,跟我们,跟我们实际的商品数据有关系吗?没有关系啊,没有关系,所以我们是可以直接跳过不要这条数据的。那这边的话,我们的一个商品信息的基本内容的话,我们就都给他啊,获取出来了 啊,基本的一些信息啊,它的一个标题,商品 id、 店铺价格啊,就是它的一个省份城市以及它的销量情况啊,我们就都拿到了。如果说你需要一些其他的数据的话,呃,你可以根据根据自己的喜好去选啊,比如你要它的一个封面图,那 这个话应该就是它的一个图片啊,那商品的图片,如果说你需要的话,那你可以把这个链接给它取一下,那 好吧。啊,这个话就是我们的一个数据解析的一个代码。呃,大家有没有问题?那从我们的一个六十六十行到我们的八十一行啊?看大家有什么疑问想问的吗?有没有问题想问的?没有问题的话看到效果扣个六,有疑问的同学啊,可以扣个五。 厉害,这个是基本操作啊,基本操作,其实我们这一部分的话,它其实是属于 python 基础语法里面的一个内容啊。 多页批量怎么处理?怎么做?你先把这个单页的话听懂,听明白,你再去考虑多页,如果说你单页的话,你都还有不懂的地方的话就尽可能现在给大家去解决啊。你如果说这个单页你都不懂我把多页给你讲了你一夜都爬不了你就没办法爬多页啊, 多页的话会更麻烦一些, 大家都没有问题是吧?嗯啊没有问题的话我们接下来的话就是关于这个批量采集啊。批量采集的话它其实也也不难啊。啊我们第五步啊批量采集数据啊。 批量采集数据的话你要只要记住一个点啊只要记住一个点分析什么呢?分析请求链接或参数的一个变化规律。 参数的变化规律好吧。有回放吗?公安课的话是不提供回放的。公安课不是我们的系统课程啊系统课程的话是有回放的公安课的话是一个免费的一个试听课程。它是没有回放的啊没有回放的 咱们这一个的话只是一个试听课。 呃记住啊就是我们做爬虫的话啊都是这样的一个步骤啊。就你要做多页的话无论说你采集哪一个网站的数据都是要去分析它的链接啊或者参数的变化。像我们这个的话它是很明显是有参数的啊 很明显是有这种参数的有参数的话基本就是参数的变化他不会说。呃前面这个链接基本上是不变的基本上这个链接是不变的。这链接也太多了吧嘿嘿。这链接也太多了。我能不能单独过滤出来这一个 看一下看一下我能不能单独把这一个链接给它过滤出来。 他为什么加个问号就不行呢? 我想单独给他顾虑一下不然大家看起来会比较乱啊,比较乱。嗯,这样子可以吗?啊,这样子话也也挺多数据的。嗯 嗯,那行吧,那我们先,嗯截个图。好吧,那我们就只能截图了啊,我们截个图啊,截个图。 ok, 我 们截个图。先放一边啊,先放一边。呃,然后的话我们来看一下。什么呢?我们翻到第二页啊,我们到第二页,咱们点到第二页, 第二页的话我们来搜一下它的一个参数。嗯,第二页的参数也是这玩意也是这个弹麦啊, q 六 啊,我搜个 q 八吧啊,搜个 q 八啊,那就第二条这个啊,你看一下它的一个参数的一个变化啊,参数在哪个地方会有一些不一样的? 我天老爷是不是多了一堆啊?多了一堆这个东西,其实后面这些的话你是可以不用看的,这几个你不要的话他也能拿到数据啊,你就按到第一个,按到看前面这几个就可以了,看前面这几个就行了。这个 b x u a 的 话,你给这给给这个的话他也是能拿到数据的。 那所以我们就看这几个。嗯,首先的话是这一个肾的一个变化,还有一个 t 的 变化, 给你截个图吧。 哎呦啊,没事 啊,它的一个参数的变化的话主要是在于什么呢?嗯,主要是在于我们这个梯值的变化啊。梯值,梯值的话它是一个时间戳,还有一个是一个 send 的 一个参数,这个的话是一个加密参数啊,加密参数,然后还有一个的话就是这个 data 啊,这个 data data 的 这个参数会变。 data 里面的话主要是什么呢?主要这个 performance 里面的内容中的内容啊会变化, 那也就是这个 performance 里面的数据啊,给大家对比一下啊,我们把它做一个,呃,做一个处理,来,我们给它做一下处理,节省工具。 粘贴过来,去掉转移格式化呐,这是格式化之后的内容啊。呃,格式化完了之后的话,它这里面有没有对比的?这个没有对比,我们换一个网站,换一个能对比的 打进行对比。 ok, 我 们把这个粘贴过来啊,复制粘贴打。这是我们第二页的参数啊,第一的参数的话我们就直接从这个链接里面复制就行了。从我们这个代码里面去复制啊。嗯,它的一个 data data 里面的 proform 啊。 proform 的 话。哦。有这么多吗? 这么多吗?这么多的话我们就还是从这里面看吧。 这是我们第一页的啊,打,这是第一页的,我们把这个 performance 在 哪里啊?在这里。 ok, 删掉,粘贴,移除转移,格式化,复制 对比。好啊,你这样的话就可以看到它不同的一些参数的一些变化情况了啊?不同的一个参数变化情况。呃,首先的话,这是第一页的, 对吧?第一,你换一个配置,然后有一个什么呢?啊?这个什么投,呃,总数的结果啊,还有一个 b c offset, 对 不对?还有一个这个 nt offset 啊,是变化的,然后这边的话是多了什么呢?多了三个这个值的啊,多了三个这个值,多了一个嫩的,这种嫩的话你可要可不要啊?可加可不加,懂了吗?啊?这边没有,这边也有,但是它是一个嫩的话就可加不可加,懂了吗?啊?这边没有,这边也有,但是它是一个嫩的话就可加不可加,如果要么就全加,要么都不加, 要么都加,要么都不加,无所谓的。其实我们主要变化的话就是哪一个呢?你只要把这几个变化给它构建出来就行了。一个是什么呢?啊?这是第一页的啊,这是第二页的 啊,这第一页第二页的。那它里面这个里面的变化的话就是我们的一个。呃,配置,那这个配置的话是我们的页码,然后还有一个什么呢?还有个这玩意给它复制一份。 那然后还有一个什么呢?还有一个 b c offset, 还有一个我们的一个 n t offset 啊,就这几个值是变的啊,这几个值变了。这几个值的话,你像我们第一页的话他是空的啊。第二页的话一个是负九,一个是十三,然后第一页的话是四千八,然后第二页的话是二二七二幺三五。对啊,他是没有任何的规律的啊,就没有任何规律可言的 啊?没有任何规律可言。这这三个参数的话是没有任何规律的啊, 咱们就写在这里啊。这三个参数 啊,没有规律啊,没有明显的,应该说没有明显的规律啊。那它的数据从哪里来的呢?它其实的话就相当于什么呢?第二页的第二页的。呃,传入的内容啊,传入的内容 是从什么呢?是从第一页的响应数据中返回的, 明白吗?就是我们,你像我们这个什么呢?二七二幺三五和这个负九一十三这些参数它是从第一页里面进行返回的。我们第一页的话是哪个?就这个吧,打字。第一页的啊,你看一下啊,他在哪个地方呢? 我们可以搜得到的,可以搜得到他这个字的,给大家搜一下,搜一下这个二二七吧。嗯,看到没有? 二七二幺三五。 nt offset 一 十三,还有我们那一个 bc offset 在 哪里啊? bc offset 在 这里,看到没有,对吧?所以我们这几个指的话,它都是从第一页当中进行一个返回的啊?从第一页里面进行返回的, 懂了吗?所以我们在哪里呢?在我们采集完这一个数据之后啊,采集完这一个数据之后,我们需要去获取什么呢?获取下一页的一个参数内容 啊。获取下一页参数内容的话,它分别是哪几个?呃,一个是 b c opposite 对 不对?还有一个的话是我们这一个它, 嗯,还有一个是哪个?还有是这一个 n t n t。 给个下划线吧,这样的话看着舒服一些。就没有这个波浪线啊,大家给它取一下啊。呃,它的话是在哪个里面呢?在我们的 这个?对啊,这个嫩啊,这个麦音 four 里面,在这个麦音 four 里面,在这个麦音 four 就 data data 下面的麦音 four。 麦音 four 里面的话就是有我们这些内容啊,有我们这几个内容, 看到没有啊?那我们就给它取一下接生 data。 取 data data 下面哪一个呢? make 看一下啊,它有一个大写的,我们还是直接复制吧,防止搞错啊。然后我们这边的话就是 b c offset 复制。不要这个斜杠啊,那这边的话就是我们的一个 nt office, 然后这边的话就是我们这一个 result。 这个能不能理解啊?这个能理解的扣个一啊, 能理解的话扣个一。对啊,就是我们这几个参数是怎么来的,然后这个页码的话可以自己构建啊,这个话就自己构建就行了啊,自行构建,自行构建我们的一个循环啊。 好啊,所以我们变化的参数的话啊,这里面的变化我们是搞定了啊,这个话是已经搞定了,对了,这就搞定搞定了,然后这个时间的话,我们也可以自己构建啊,自己构建我们的一个选项,那就是通过什么呢?通过我们的内置模块, 通过 python 的 内置模块 tom 进行一个获取啊,通过我们内置模块 tom 进行一个获取啊, ok, 说我们现在的重点是哪一个呢?重点的话就是这个肾的一个加密参数啊,重点的话就是它啊,重点的话就是它 啊,因为它是个加密的,加密的话你得去做一个逆向啊。嗯,我们在这里写一下逆向,分析一下肾加密参数的一个生成。 首先啊,首先第一个定位一下加密位置,我们直接以什么呢?以这个肾冒号啊,以肾冒号作为关联字进行一个搜索查询, 搜索查询啊,看它具体是在哪个地方进行的一个加密,我们来搜一下 啊,一搜的话返回了两个文件啊,在两个文件里面 打,这两个文件当中是存在了我们的一个加密的一个情况。那第二步干嘛呢?断点调试分析,就对于啊疑似啊加密的位置进行一个什么呢?断点 啊,对一次加密的位置性断点啊,那像这个的话他肯定就不是了,什么肾对应的一个什么呢? t 九幺,这个肯定啊,肯定不是的,如果说你觉得他可能是,你就在这里打个断点就行了啊,点一下就行了啊,其实这个不是的,那这个 s 肾的话,那肯定明显也不是的嘛,看得清楚不?看不清,放大一点啊, 这也太大了吧啊?这个 s 肾的话肯定也不是的,所以说我们第一个文件就不用看了,看第二个文件, 那这个肾的话,对于这个 e p 啊, e p 这个肯定也不是的。嗯, s 肾,那也不是的,那这个 e m 的 话就有点像了,打这个 e m 的 话就有点像了,那我们就在这里打个锻炼, 打这个 y, 然后下面呢?打下面的话是一个 ne, 对 ne 这什么肾,那肯定也不是的,然后这个的话也是个 s 肾,那也不是的啊,这个也是 s 肾,那不是的啊。这里的话有个 e c, 打 e c 的 话可能是的。那我们也打个断点啊,打个断点, 那后面的话都不是的了,都不是的了,对不对?都不是的了啊。所以说我们疑似加密的位置的话,可能就这两个啊,就两这两个地方,对不对?那这两个地方断,断住之后的话,我们干嘛呢? 啊?我们直接点击下一页啊,我们直接点击下一页,我们把这个断点先先暂时。哎呀,卡住了, 我们直接点什么呢?第三页啊,那他在哪里呢?他就相当于在这个地方生成的,那在这一块,那在这一部分啊,就生成了我们的一个加密值, 这个的话是不是生成了我们加密值九五二二 c 零八幺五 d, 你 可以对比一下我们把这个过电啊,你可以来对比一下这个参数到底是不是的。这里还有一个啊,它可能很多个接口啊,很多个接口都是有这个肾的。 ok, 那 我们来搜一下啊,搜一下我们那个接口,它里面的声势是哪一个?唐曼啊,搜这个吧, ar c 三 点到了,哈哈, ar c 三, ar c 三应该最后这一个, 那我们来看看他的一个肾啊,肾的话是九五二二 c, 九五二 c, 你 看这跟这里是不是一样的?就跟我们这个是一样的吧, 那九五二二 c 是 不是一样的?那一样的话,那你是不是就知道我们加密的位置就是哪一个?就这就这个嘛,那就这个是加密嘛?那那下面这个就不要了,就留这个就可以了。好吧,那我们让他断一个新的啊,让他断一个新的。 ok, 那 么回到第二页去。好啊,我们来分析一下啊,我们既然知道它的一个位置之后的话啊,那第三步复现它的一个加密代码 啊,复现加密代码的话,我们来分析一下它的整个啊,整个代码逻辑啊,那这个的话就是我们生成的嘛,就生成剩的一个代码啊, 它相当于什么呢啊?它的参数是哪几个?它的参数是这几个啊,这是它的参数,就相当于把我们这个啊 em 点 token 加它加 e t, 加这个,加 e c, 加这个,加 e p, 点 t, 点 d 塔啊,做了一个字母串拼接 啊,做了一个拼接嘛?啊?做了一个拼接啊,相加拼接,拼接之后的话啊,传入它的一个方法就是它的一个函数,函数是哪个?就是这个 e, 那这个方法就相当于把这些拼接起来传进去,所以我们现在就要去分析它每一个参数分别对应的什么?那这个 e m token 是 什么呢? 把 e m token 我 们来看一下它的返回值啊,是这一串啊,是这个。那么的 e t 呢? e t 对 呢是什么啊?对应了它?哎呦,还有呢?我们的 e c ok? 哎,我老是点错,怎么 e c 啊?对应了这个,然后我们 e p 点 d t ep 点对他对应的话是哪一个啊? ep 点对他对应的是。呃,这个玩意我们就写个短一点的,我就不写那么长了,怎么老点错呢? 啊?就这样子吧,那大概是这么一回事啊。啊,你通过这里去看这几个参数的话,你能够知道自己参数分别对应的是什么东西吗? 看得出来不啊?这个 e t 是 什么?这 e c 是 什么?这个 e e e p 点对它这三个参数的话是最容易看得出来的。最容易看出来的 e t 是 什么?时间错呀? 对啊,时间错啊。 e c 呢? e c 的 话它其实就是我们那一个 app, 那 就是个 app 啊。 ec 的 话就是我们这个 app 啊,这个 e p 点 data 呢? e p 点 data 的 话就是我们这个请求查询参数里面的 data 啊,这个话就是我们的一个什么 查询参数中的一个 data 啊。 data 哇,这个的话是 app 啊,这个的话是固定的,这是固定的。 ok, 那 么这个 token 呢?那这个 token 的 话它其实是 cookie 中的参数啊。 cookie 中的参数。 cookie 中的哪一个参数?给你看一下 cookie 中的这个参数 呐, 四 c 四 b 八七 b 六,对不对?就这个啊, cookie 中的这个参数啊,就是每一个参数分别代表的是什么。你就知道这些参数怎么来的嘛?是不是啊?这个参数怎么来?之后的话你就看这个一 e 的 一个方法啊,这个一 e 的 方法的话, 你可以选择看他的原码啊,看他的原码长啥样子,你可以看这个原码打这原码一看的话就是个 md 五,哈哈哈,这原码一看的话就是个 md 五啊,打看原码的话,其实能够看出来他的一个特征,像这种的话就是一个 md 五的一个加密。打,或者说你是看他的一个返回值啊, 判断我们的一个什么呢?函数的一个方法加密啊,方法的一个使用啊,要么就是啊,第一个,要么直接是什么呢?查看它的一个 e e 的 一个函数代码啊,要么第二个啊,查看它的一个返回值,它的返回值也是有特征的啊,它的这个返回值的话是一个什么啊?是个这玩意, 对,是个这种东西啊,是个这个,对,这返回值的话是符合什么呢?它是符合 md 五加密的,那返回值啊,符合什么呢? md 五的一个加密啊, 加密特征的。 md 五加密特征是什么呢?就是由我们的一个零到九, a 到 f 啊,组成的三十位制服啊, 应该说符合我们的哈希的啊,三十位字母,但它就是一个 m d 五加密特征,然后你可以通过什么呢?可以通过啊,通过这个 e 传入一个什么呢?传一个一二三四五六进去进行一个加密。 进加密,它会返回一个什么呢?返回一个一幺零 a d c a d c 开头,然后八八三 e 结尾的一串字母,那这个话就是一个标准的啊,当你传入一个一二三四五六进去,然后它返回的这玩意,那它就必然是一个标准的一个 md 五加密, 那必然是一个标准的,那这句话你看它不就是一个标准的一个 md 五吗? 不就是一个标准的一个 md 五吗?那既然知道它是一个标准的一个 md 五之后的话,我们是不是可以自己把这个呃参数给它固定出来?好吧,那我们在前面写一下啊。 嗯,首先的话,我们 str, 那 我们加密的内容的话,就是哪一串呢?啊?就这一部分,那就这一部分。好,我们的一个 token 给它拿过来。 to 的 话就它啊, et 的 话是时间戳啊, et 的 话是时间戳啊,时间戳的话我们先不管它啊。啊?可以管吧?我们先给个什么呢?给个固定的啊? 然后 ec 的 话啊, ec 的 话是一个 app, 那 我们也可以给它拿过来啊,然后我们 e p data, e p data 啊,一批 data 的 话,这里你要直接去复制这一个的话,我觉得不是很好 啊,你要这样的话,我们是可以这样子去复制的,但是呢,不是很方便去传我们的参数。 对,因为我们做翻译的话,我们刚刚是不是分析过,我们去做翻译的时候,它这一个呃 data 当中,对啊, data 当中哪一个呢?这个 performs 的,它里面是有这个配置啊,还有这个呃 result 以及这个 b c of c 和这个 n t 的 话,它是会有变化的,所以你直接给它写成这样子的话,我你就是不太好去传参 啊,不是很好传餐,所以我们可以选择什么呢?给它分开啊?我们这个 e p performs, 我 们单独用一个什么呢?单独用个字典去接受哇,我们给它做一个虚拟化处理啊, 点上它点个什么呢? performs, ok, 我 们单独把这个拿过来 给我串一下 啊,这个嫩的话,我们直接加引号吧,直接给他加引号啊。 呃,加引号也行,你给个那也行,给个那个那也行,就是给个,我们这是拍,这是 g s 里面的一个空值吗?拍摄里面的空值的话是这个拍摄里面的空值,这个,所以你给个加引号也行,你不加的话,呃,也可以啊,这个没关系啊,没关系 啊,但是呢,我们要去做虚量化的处理啊,导入一个虚量化的模块, import json 啊,为什么要做序列表呢?因为这边的话它是一个字母串啊,它是个字母串啊,我们这里的话是一个字典,所以要给它做一个转换啊。做一个转换 对不对?做一个转换啊,那我们这边的话怎么去写呢?嗯,我们的 data data 的 话就是这个对应这个,然后我们的一个 post 的 performance 的 话啊, performance 的 话我们就要传一个什么呢?传一个字串进去,就是 e p data 的 一个字串。那就接声点上 dumps 传进去,然后空格给它删一下啊,它的空格给它删一下 啊,它的空格给它删一下。好,然后的话这边的话还要进行一个二次转换,点 jump, ok 啊,这个话就是我们的 e p data 啊,这个话就是我们的一个 talkin 导,我们的 e t 的 话是一个整数,所以我们要给它强制转换数据类型。哇,这是我们参数的一个规则啊,参数的一个规则,参数规。呃,处理之后的话,我们通过什么呢?导入一个哈希的一个模块, import 哈希 lib, 通过这个哈希进行一个 md 五加密,点上 md 五 str encoding utf, 杠八啊。点上我们的一个加密,那这个话就是我们的一个肾的一个值,我们来看下这个肾值和我们刚刚的那个是不是一样的, 你选一下啊, c 六啊, c 六一, c 一 八二 ca, 对 不对?其实我们这边的话应该不是这个,咱们这边的话应该不是的, 咱们这边是七 f 啊,七三五,咱们这边的话是七三五多少?然后我们这边的话返回的是 c 六六多少?大家可能会觉得说,是不是因为我们这边是不是加密,是不是有点不对, 对吧?这个 e t 的 话,我们都是一样的啊,因为我们这个值的话都是跟这边来一样的,但会有大家可能会觉得会不会不对,那不对的话可能是在于什么呢?呃,可能是在于这个里面啊,在于这个里面, 对吧?它里面的话,我们它的那个嫩的话,我们是给的这个啊,给的这个,呃,我可以给它改一下,那我们把它这个嫩给它改一改,试一下, 看会不会是一样的,那还是不一样的,那还是不一样,但影响吗?不影响, 呵呵,为什么呢?啊?但是不影响,为什么呢?因为它这个 force 的 话也要改啊,如果说你要改完全一样的话,我觉得这个 force 的 话也要改,因为在,呃,在我们的一个 note g s 里面的话,那个 force 可能是个 force, 但这边 force 的 话应该要给它加上这一个,就加上我们大写的一个 force, 就是我们这个 python 里面的打字, python 里面的一个 face 啊,还有这个 q, 如果说你要都一样的话,这种薄类型啊,你都得给他改,我看一下全部给他改了会不会是。呃,全部改的话应该是能够一样的,但其实你不改的话也没关系啊, 你不改也没关系,因为只要你是能够对应的上的话就行了,就是你这边用的和你实际传的能够对应的上的话就行了,就是你这边用的和你实际传的能够对应的上的话就行了,就是你这边用的和你这些东西全部得换啊, 不然都得换,我看一下还有没有什么地方需要换的。这种薄类型的话都得改啊,薄类型都得改啊,这个例子应该不用改吧, 看一下这样的话应该是一样的吧,七三一五还是不一样,哈哈。啊,还是不一样的话,不影响不影响不影响不影响,对吧?不影响 对不对?因为它这里面的话一段内容的话太多了,这里面主要是它这里面的一些一段内容数据的话七七八八的会比较多啊,比较多,比较多,它会有一些些不一样的话是没有关系的。看一下, 我们前面是用了一个 ppt, 我 们用这个 ppt 打一下, ppt 打一下, 然后我们这里边是做了一个虚拟化的一个处理,打接上点单,我们是转成我们的一个注串,转完注串之后的话我们再用它啊,再转成了一个注串啊,那应该是没问题的,没问题的啊,没有任何问题的,我们给大家演示一下。我们来试一下啊,这个是第几页的 啊?这是第二页的,对不对?好,我们来直接测试一下啊,测试一下啊,这边是第二页的,我们把这个 e t 啊,把我们的参数改一改啊。 e t 的 话就是 t, 胜的话就是胜 啊。我们的 e p data 啊,这个 data 的 话就是那个 e p data 啊。 e p data。 来我们运行一下,看能不能得到我们的值。呃。得不到。呃。得不到的话你要考虑到一个问题。 考虑到什么问题呢?考虑到我们这个 token 它是不是会变?它没有变, 没有变,网站也没有变。等一下啊,因为这里的话拿不到的话你要考虑一下网站应该数据的话是没问题的数据的话是没有问题的。 唐迈 q 六 啊四 c 那 这个是没有问题的啊,没有问题的话我们这一个, 那我们这个一 p 的 话我们就不改了吧。这个东西我就不改它了,我就不动了啊,这个一 p 的 话我就不动了, 因为你动的话它反而可能,因为我在想它可能会不会有问题,就暂时先不动了, 暂时先不动来再运行一下。嗯,还是拿不到 我还是拿不到啊。拿不到的话我看下它这个返回的数据是啥。 呃。返,嗯, 返回的是这个。 哎,我是第一次看到它的返回信息。是这个 app id 时间戳。 嗯,我还是给个第一页的吧我还是给一个第一页的。我还是给第一页的。 b c offset e p performance ep performance 没错啊,我是哪个地方写的有问题吗? ep performance 没有错啊, data 对 的呀。 啊 sorry, 因为我肯定是有哪个地方传错了啊,这样可以了, 因为我在想是不是我哪个地方参数写的有问题啊?因为一直看的话是这个地方传错了啊。一个小细节啊小细节,没注意到的一个小细节,因为像这种参数比较多的话有时候会搞错啊。 呃,就什么呢?就这一个啊?我们来看这几个东西对应的,首先的话这个 e p performance 的 话是传到这里面的啊,然后这个 data 的 话是到这个地方的啊,到这个地方的,所以我们刚刚是把这个是写成了 e p e p 的 啊,所以说在这个地方有问题啊,有问题, 好吧。啊,是在这个地方啊,在这个地方把这个地方的话前面传错了前面传错了 啊前面传错了啊,因为我们要传的是这 date 啊,然后现在的话就是没问题了,看到没有啊?现在的话就是没问题了,好吧。呃,所以我们接下来的话就要去做一个什么呢?接下来的话我们就得稍微修改下代码啊, d f get 肾 啊,你要做批量的话啊,做批量的话那我们得修改一下这一个字啊。 et 的 话我们当参数传进来还有一个配置,对啊,有一个配置,有一个,我们的一个什么呢?呃 啊,这边的话我们等一下再弄啊个配具, b c offset, n t offset, 还有一个什么呢?还有我们这个值啊,因为每页的话它的这个值不一样嘛。 对,这个大的值不一样啊,所以我们现在的话需要去进行传递。 et 的 话干掉啊, et 干掉,然后我们的一个配具,配具的话对应的是哪里呢?我们来看一下我们那个配具的那个值在哪里啊?配具在这里。 那这个的话是搜索关键字啊,就是你搜索的是哪一个关键字?我们是这个是蓝牙耳机嘛,我们搜的是耳机啊,然后我们的一个这个, 然后呢?我们的这个九十六会变吗?这个九十六好像不变的, 他那个九十六会变吗? 那没变的话可以不用管哎。不变的话可以不用管。不管他吧啊? bc of state, n t of state 哇,就这个其这两个,这三个值的话,不改的话,我没有测试过啊,没有测试过它会不会,它可不可以啊?当然你可以自己去试一下 啊。这是我们传入的值,传入值,然后我们给它 return, 返回,返回我们这个肾啊,返回这个肾值, ok, 返回这个肾值,然后这边的话我们就 df get 啊, get 我 们的一个 control 层 啊,获取我们的内容,然后进行一个传递,然后我们也 return b c n t t o 啊,给它返回, 返回这边的话 e t 啊,就是我们的时间戳。那我们得导入一个什么呢?导入一个时间模块。 呃, import 我 们的一个叉到 import 叉啊, e t 的 话就是获取当前时间戳啊,获取 当前时间戳。 et 等于 int 括号唱点上一个唱乘以一个什么呢?一千啊,乘一千,这个的话就是我们的 et 值啊,我们的胜值的话,胜值的话就等于什么呢?等于我们这个 get 胜。那就把这些东西传进来 好,然后我们这个配置的这些内容的话,就是放到这里啊,放到这边进行外部传入,然后 epdata 的 话啊, epdata 的 话我们要也要进行一个返回,我们就把这个 epdata 也给它返回出去,把这两个值我们都给它返回啊,都给它返回,没毛病啊。 放到这里,然后进行采集,采集完了之后获取数据,这个就不打印了,然后拿到, ok 啊,拿到啊,拿到之后的话我们保存一下啊,保存数据的话,我们导入一个 csv 模块啊, import csv 啊, import csv。 嗯, import csv 的 话,那我们首先创建一个文件对象, f 等于 open data 点 csv model w n cording utf 杠八 newline 字典写入的方法, f 加上 fillance。 呃,这个 fillance 的 话就是用我们什么呢?用这个字典里面的键就好了,给它复制一份, 用这点里面的键, ok, csv write, 然后在下面的话,我们写入表头啊,写入表头 and 啊,写入数据的话我们就在这里面写就行了,写入数据, 因为这个的话是一个全集变量啊,全集变量的话我们就直接写就行了。然后我们构建一个循环啊,构建一个循环,翻页 for page in 我 们的 range 从第页到第十页就采集前十页的数据,然后我们去调用一下它 啊,调用一下, ok, 然后我们这个 b c 的 话啊, b c 刚开始的话是等于一个空的啊,啊,队内是一个空的啊,队内是空的,这也是一个空的。 然后我们这个的话对应的什么呢?这个的话对应的是我们的一个四千八啊,四千八啊,四千八。 ok, 然后把这三个再进行一个,返回 print 正在采集第多少页的数据内容, 右键运行。 好吧,这就是我们的一个批量采集。好吧,看到效果的同学扣个六六六。那这的话就是我们批量采集,采集完之后的话,我们的数据就绑在哪里呢?绑在这个 data 点 c s p 的 一个文件当中。

挑战用爬虫爬一百个网站第十二期极梦 ai 提示词爬取 j s 逆向分析, 我看到这个页面上面啊有非常多的好看的图片。好,那么我想知道这些图片它是怎么生成的,所以说呢,我会点击进去啊,看一下它的这一个右边的这个题日词,但是如果说我想把它对应的这个图片的这个题日词批量把它采集下来的话,该怎么做呢? 当然这就离不开我们的这个爬虫技术。好,来看一下怎么实现。使用 f 十二快捷键打开开发者工具面板,然后在当前这个网络的界面当中呢,我们直接去刷新一下这个页面,去抓取一下这个数据包,结果发现直接断在这里了,但是大家别急啊,这是我之前下的这个断点,不是反撩式的问题, 啊啊啊,你数一下,好, ok, 然后呢我们现在啊就可以看到当前的这个全部的面板当中呢,加载出来了非常多的数据资源,我可以直接在这个地方呢去搜索一下这个题词,比如说我看一下这一张图片,嗯,他的题词是什么呢?一组 我们搜索一下,从这里的话是匹配到了相应的数据包,我们点击这个进来观察一下啊,那你会发现这包含了这个图片的一个格式,然后还有他的一些详细的数据信息,以及他的这个类型。好, 他这些格式,那么我们的这个数据包呢,就已经找到了,可以去筛选一下,复制在这里筛选一下。 好,那这个请求接口的话,就是这么个请求接口。对于,但是呢我们刚想要去下载啊这一个名词词的时候,结果啊,我们会发现这里有一个载荷数据,有一个叫做 ms token 值,还有一个叫做这个 e 杠 boons。 那 像这两个数据的话,我们肯定是不陌生了,因为他们所对应的这个值啊,不就是我们 经常看到的加密数据的话,我们怎么去逆向分析得到我想要的这一个加密逻辑呢? 我们应该去我们做一个这个完整的爬虫的时候,遇到这种加密数据的话,我们是要去模拟这个客户端去生成这个加密数据,才能跟我们这个服务器啊去谈条件,这个服务器他才会较量成功把这个数据返回给你。所以说我们怎么去找这个加密逻辑呢?这个就是重点。好, 我们可以直接通过关键字搜索的方式,比如说我可以复制一下这个加密数据的名字,我们在这里搜索一下,但是你会发现它出现了未找到匹配项的问题,又或者说呢,我们搜索一下这个 ms token 值还是未找到匹配项,那说明我们当前这个网站啊,它是不支持我们去使用关键字搜索的。 那我们可以去换一个方式,比如我可以去跟站去分解啊,又或者说呢,我还可以去使用这个叉一叉断点调试的方式,因为你看到我做了这个 face 叉一叉面板的筛选啊,这个数据包它是原封不动的在这里的,所以啊,我在这里的话,我可以去通过叉一叉的这样的一个请求方式去进行筛选。 好来我们复制一下这小段路径,来到原代码的这个地方,把这个叉 h r 的 提取端点呢给它加上,好翻过来,拿过来之后我们接下来要做的啊,就是划拉这个页面,让它断住就可以了,那么你会发现它是已经断在这里了,并且呢,我们观察一下这右边的值啊,有没有想要的这个加密数据呢? 好像没有,那么我们往上去跟一跟好还是没有?那再往上跟一跟好还是没有。那么再往上去跟一下,再往上去跟一下的话,我们这里 再观察一下啊,有没有我想要的 acombigs 的 一个加密数据以及这个 ms token 值,其实你会发现呢,在这个组串里面,它是包含这个数据的,这个 ms token 一 直以及这个。嗯,哎, acombigs 在 哪里呢?这里只有这 ms token。 好, 我们继续来看啊,这里的话是有一个这个链接啊,那我们看一下这个链接里面有没有包含我们想要的这个值号。 有的啊,这个 a 杠波源 c 也是在这里的。好,没问题,那我们就已经找到他是在那个地方生成的,他就有可能就在这个位置生成嘛。好,所以说呢,我们直接通过啊,这个单目调试,我们跟进去。 ok, 那 你会发现呢,他跟到这个位置啊,他是一个一封法。好,然后是有几个这个参数的,我们可以去观察一下这个代码的特征是什么。哎,你会发现他是这样的一个 j s v m p 的 一个形式啊。好,那这只是符合我们的这一个,嗯,那个某音的一个加密特征吗?好, 这之前是给大家去讲过的一个 bug, 这样的一个逆向逻辑怎么去实现的?那我们再示范一下这个单点,再重新断下来,直接去模拟一下它的那个入口就可以了,你会发现这就是一个这个 b、 d、 m、 s 的 单独的这一次文件,那我们跟进来,对吧?去模拟一下啊,这一个去 模拟一下这个方法,然后把它里面的这些方法把它导出来就可以了。然后我们一整个的把这一个啊,把这一个 b、 d、 m、 s 的 这个这一次文件 把它复制下来。等一下错了,不是这个,嗯,是这个啊,就这个, ok, 就 这一整个的啊,这个 b、 d、 m、 s 的 这个 j、 s 文件,把它就是扣下来, 扣下来之后呢就去补按键就可以了。我发现这里就是找到我们刚才跟进来的这个模块的位置,然后去掉用这个方法,因为它是使用的这个 j、 s、 v、 m、 t 的 这个加密的话,其实是类似的。好,那我们今天的话就分享到这里。

挑战爬一百个网站,今天是 boss 直聘批量采集这节课的话,给大家带来的案例就是关于 python 采集 boss 直聘的一个数据。那么首先在这个页面当中啊,按一个 f p 十二, 按了之后的话我们直接刷新啊,直接刷新让整个网页的数据重新加载一下,好,刷新出来之后的话啊,我们 直接点这个搜索按钮,然后输入我们想要的内容,那公司名字肯定是想要的吧?那我们就搜一下这个上海鲸鱼机器人回车,回车之后的话,我们在这个地方他返回了我们两个接口啊,来截图 啊,第一步的话这里啊点击这个搜索按钮,第二步输入搜索内容 回车。只要是什么呢?只要啊含有搜索结果的啊,搜索内容的数据包都会进行一个返回,那这里的话他返回了一个什么呢?他返回了两个,对,那两个具体哪一个是我们想要的呢? 那我们就可以一个个去看了啊,因为对比整个啊,整个的话他是一百五十多个请求。我们整个网页的话啊, 整个页面的一个数据包有一百五十,一百五十个,对不对?一百五十三个啊,一百五十三个,是不是啊?但是我们通过搜的话就把这个范围缩小到只有这两个了 啊?只有这两个,那这两个具体哪一个是我们想要的呢?我们可以点击数据包去查看啊,就一个个去看啊,首先看第一个, 首先我们来看第一个啊,第一个里面的话有我们的信息吗?有,很明显他是有的,上海那他城市,他的一个经验要求学历,要求工资,然后他的一些,呃,公司的地址啊,七七八八的,反正都都在这里面。是不是都有啊?但是的话问题在于什么呢?问题就是在于他只有一条, 他只有我们当前的一个信息内容。但是我们这里的话,这么多的一个招聘数据信息, 是不是除了这一个上海鲸鱼机器人,还有华为的?那华为科技有限公司的,一个是苏州的,一个是上海的,对,这些数据是不是也得要啊?那我们就看第二个嘛,第二个的话它其实也比较明显,有个 job list 点节省职位列表吧的。 job list 的 话不职位列表吗? 对,在这个里面的话啊,它就存在我们多条数据信息,我们给大家在预览里面看啊,那这里面的话就是包含我们零到多少?一十四就相当于十五条招聘数据信息。 那第一个上海鲸鱼机器人的,然后第二个,那我们的一个苏州工业园区的,华为的,对不对?第三个的话也就是我们那一个,呃,也是华为游戏,华为的,那这个是青浦区啊,但这个城市上海的, 是不是?所以说我们第二个接口里面的话,他才是我们想要的一个数据内容啊?第二个接口才是我们想要的,因为我们去获取数据的话是批量的采集吗?对不对?那我们不可能说只要一个数据啊? 好,那这里面的话就是我们想要的,那我们既然需要的数据在这个里面的话,我们就去看什么呢?看标头啊?看标头, 看标头的话我们就常规的就看他哪几个呢?一个是我们的请求网址,一个是我们的请求头,还有请求方法啊,常规的话就是看这几个东西啊,看这几个这个东西对不对?这个话就是我们的一个数据接口,我们会用到一个加上配置的模块,它是一个自动化的模块, 它方法有很多啊,我们就用方法一就行了,就使用这个方法一就可以,那这边的话有一个代码,那给它粘贴过来,那这个路径的话, 它是文档当中路径,这个肯定跟我们的不一样吧,每个人下载软件安装的时候,它可能放的位置不一样,所以我们得去找到我们浏览器的可执行文件路径。怎么去找呢?给大家演示一下, 那比如说我这里的话,是不是浏览器,我用谷歌啊?有个更多更多,这里话有一个打开文件位置,是不是点开, 点开之后的话,一般情况你刚开始打开的话,他会有一个快捷方式啊,记住啊,这个是快捷方式,他不是应用程序啊,他不是可执行文件,所以我们要在这个快捷方式时候,再右键再打开文件所在位置,直到找到哪个呢?找到这个, 找到这里的话,它会有一个什么呢?应用程序找到之后的话,你就把这个路径复制,然后往这里一粘贴,粘贴之后的话它那个后缀也要加上啊,就它的文件名和文件这一个格式,就这个 e x c 啊,这个的话也要加上,粘贴过来之后你直接运行一下就行了, 运行之后的话,哎,它就会显示一个什么呢?显示个这玩意啊,那就说明你配置成功了,这个代码就可以删掉,就不用管了,因为你配置好的话啊,以后以后的话,它都会帮你自动打开你所配置的那一个浏览器。那我们接下来的话就写代码了 啊,直接先导入一下我们的一个自动化模块, from johnson page import chrome page。 啊,导入进来,导入进来之后的话,我们打开浏览器 d p 等于一个什么呢?它就可以了啊,就两行代码,就这两行代码,你右键一运行,它就会自动帮你打开浏览器, 看到没有啊?它自己就打开了,好吧,啊?这句话要给大家稍微的说一下,其实这个话也叫做什么呢?也叫做实力化浏览器对象啊, 实力化,哎,浏览器对象,然后我们是用了一个变量名接收吧,用了一个 d p 的 变量名去接收这个啊,就是接收这个就相当于什么呢?我们这个 d p 的 话,它就是我们这个打开的浏览器页面 啊,这个 d p 啊就相当于是什么呢?我们打开了这个浏览器的页面, 所以说你要在这个浏览器页面中进行什么样的一些操作啊?进行什么样的操作的话,它就是什么呢?就是使用了什么呢?使用这个 d p 相关的一些方法 啊,就是用了这个 d p 相关的一些方法,然后对于这个 d p 懂了吗?那我们要访问网站的话,要访问啊,让我们这个浏览器去访问一个网站,那,那不就是让我们这个浏览器得到一个网址吗?要访问网站,那是让浏览器得到一个网址,那我们就 d p 点上一个 get, 让它啊得到我们的一个网址,网址的话是哪一个?就是我们的一个 招聘的一个页面嘛,对不对?我们的一个职位页面,来我们运行一下,运行之后的话啊,它就会自动去访问了, 嗯?他怎么还不访问?嘿嘿。 哎,卡住了吗?那我们给他关了啊,我们重新再运行一下, 是不是他是不是就自动去访问了我们这个页面呢?没毛病吧?访问我们这个页面之后啊,那我就可以直接去获取数据啊,所以我们在这个啊,访问网站之前一步先监听数据。 d p 啊,触摸浏览器对不对?点上 listen, listen 就 听的意思。 star, 那 就开始 啊,就监听开始嘛,就是你要监听哪个接口,我们把这个复制过来丢进去啊,丢进去。然后访问之后的话,我们是不是要等待它的一个加载,等待数据包的一个加载 d p, 点上 listen, 点上一个位置啊,等它加载出来,等它加载出来之后,我们用个变量名去接收啊,一个变量接收,接收了之后我们可以直接获取它的响应数据内容, 点上我们的 response, 点 body, 接上这一套,那么 print 打印一下 右键运行啊,这样的话我们就可以干嘛呢?我们先访啊,监听了,然后访问,访问之后等待加载,因为我们网站加载数据它是会有一段时间的,因为我们,呃,可能你的网速问题啊还是什么?它不可能说你, 你访问立马就拿到吧?对,它可能会有一个缓存的过程,所以说我们等待它加载啊,等待加载之后的话,我们就可以拿到它返回的一些数据内容了, 这边的话就是返回了相关的一些职位信息,那他的一些学历啊,七七八八的不都在这里吗?那么第三步解析数据,这个就非常简单,为什么呢?因为我们现在拿到的这个数据是什么数据?这是一个接生字典数据啊, 所以我们只需要通过什么呢?字典取值的一个方式去取就可以了。那我们想要的数据的话,是在这个 java list 里面,对不对?这个 java list 在 哪里?在这个 zp data 里面,其实我们一开始的话,最外层的话应该是这三个,这三个键对, 那这个是啊,冒号左边是它的键,冒号右边是它的值,一个是 call 的 对应的这个 success, 还有一个的话是这个 zp data 对 应的一个字典,我们想要的数据的话,是不是在这个字典里面? 所以我们第一步的话,先取哪个?取这个吧,取这个 zp data 对 不对啊?我们这里写一下,取我们那个 zp data 啊,就这个给它复制一下 啊,取出来之后他会返回冒号右边的,也就是展开了这个数据啊,他会把把这个数据给我们进行返回,那返回的话,这里又分为这么几个建队,我们想要的数据是哪个?是这个 job list, 在 这里面的话就包含了我们整页的一个职位信息,那我们自己是不是再取它, 再取这个啊?那我们也用个这个接收啊,这个相当于什么呢?制定取值,提取职位 信息所在的一个列表啊,所在列表拿到之后的话,这个列表里面一共是包含零到一十四,就十五条数据,我们要把这十五条数据一个个拿出来啊,一个个提取,所以我们得用到一个负循环,便利 提取列表里面的元素 for job in job list。 那 这样的话我们的一个什么呢?啊?我们的这些职位信息的话就全部出来了,就十五条职位信息就全部全部出来了 啊,十五条的一个信息内容是不是都有了啊?有了之后的话,为了方便取值啊,为了方便取值,我们可以导入一个格式化输出的一个模块 啊,用一个格式化输出的模块进行打印啊,因为你像用这个 print 去打印的话,它的数据是什么样子的?就就是一行的啊,就这样子一行。呃,看起来不方便啊,看起来不方便,所以我们可以用个 pprint 打印, 而且解析数据的话,我们打印一个就行了,不用打印那么多啊,因为他的格式都是一样的,打印一条就可以了 啊,这个话就是我们相关的一个数据内容,对不对? ok 啊,我们想要的数据的话,我们简单的截个图啊,简单截个图,看他需要哪些的,有什么数据我们就取什么数据啊,有什么数据就取什么, 那就在循环中啊,提取具体的内容,然后保存到一个字典中,所以我们创建一个字典,然后去取值。首先的话我们来看一下啊,这个话是他的公司名字啊, 公司,根据冒号左边取冒号右边的这个 job 的 话,就是我们这一个字典嘛。啊?公司,然后这个是他的公司规模 啊,公司规模零到二十人,然后我们再往下深圳。对啊,这是它的城市,城市的话放前面 城市,然后这边的话有一个 gps 啊,这个 gps 的 话就它的一个经纬度啊,这个是纬度。这个是经度啊。经纬度 啊。那我们也可以取一下吧。那他公司规模。那这边的话来一个什么呢?来一个精度,精度的话是 gps, 根据冒号取右边啊,左边取右边。那他返回的是这个。这个话我们的精度是哪个?是他吧? 那我们的纬度呢?啊?纬度的话就这个啊,它的经纬度啊,学历不限啊。这个话是它的一个要求啊,它的一个学历的一个要求,然后经验要求的话是我们的三到五年。 打职位名字的话啊,职位名。职位名的话叫 python 啊。 job name 职位名。 ok, 还有其他的吗?薪资。 对啊,一万一到一万三。啊。一万一到一万三。嗯,好像就这些数据吧。啊?基本东西的话你就都拿到了,基本的话就这些啊,基本就这些。呃,但是的话这里有一个问题啊, 有一个问题在于什么呢?问题在于它有一些数据,它不只是它有区域的呀,这个是没有区域啊, 对吧?他应该有些有些职位的话有区域和街道的。你看这个话叫做什么呢?上海青浦区金泽啊,金泽,金泽的话应该是他的商圈。对,所以我们区域的话也要取消。这个是区域啊,但我们这里面是没有显示的,因为他这里只是一个深圳,所以区域的话也得拿一拿 啊。这个话是区域。还有一个的话是商圈啊,商圈的话我们来看一下。这个话是商圈 b u 这个吧,这个话应该是商圈。对呐,商圈。呃。还有一个它的一个公司领域啊,公司领域是做互联网的。对,那我们就写在什么?写在下面啊, 基本的话就这些东西啊,招聘的人的话就不写了 啊,就拿到这些基本的数据,我们来打印看一下这个数据,看这个数据拿到了有没有什么问题,这个的话就不打印了, 这的话就是我们第三步解析,没问题的话我们就第四步了啊,保存数据了啊,这边的话就是用的字典取直的一些方式啊,然后保存数据的话也很简单啊,保存数据的话也特别简单, 那也特别简单,反正它就一个固定写法,导入一下 csv 的 一个模块啊, import csv 创建文件对象, f 等于 open data 点 csv model 等于一个 w, encoding 于 tf 杠八牛奶 字典写入的方法, c s v 点上字典写入,把文件对象传进去,再加上字段名,这个字段名的话就使用什么呢?使用这个字典里面的键就行了啊,使用这个字典里面的键就好了,然后做一个批量替换吧, 就留这个键就可以了,其他的话就不要了。 ok, 然后我们 csv write, 下面的话我们就写入表头点 hander, 在 这里的话我们就写入数据 reference 啊,就可以了,然后右键一运行,它就会把我们这个数据直接保存到什么呢?保存到这个 data 点 c, s, v 的 文件里面,看见没有?那 python 讲师,安庆,然后 python 算法工程师,对吧? 这些就是我们的所拿的一个数据信息。那么批量采集数据啊,也很简单啊,因为我们核心点在于什么呢?核心点是在于模拟人的行为吗?我们如何才能查看更多的数据呢?是做一个下滑啊,是下滑我们的页面,让它加载更多的一些数据内容出来, 所以我们只需要在构建一个循环,进行一个采集完一页之后的话,做一个下滑就可以了。那我们可以在这里啊构建一个循环翻页 for page in 我 们的 range, 比如说我们爬个前二十页,好吧,前二十页的数据, 那就到二十一嘛,然后我们做一个循环,然后我们再做一个下滑页面啊,下滑页面 d p 点上它点这个,这个话就下滑页面到底部啊,到底部的话它就会加载更多的内容。那加载更多的我们再获取更多的数据嘛, 这就很简单, printer 打印一下,正在采集几页的数据内容。嗯, 数据内容 ok, 运行 等他访问啊,然后你数据啊,那这样的话我们就可以做一个批量的一个操作了。 嗯,这里有一个数据报错了啊。对啊,有一个没有经纬度的啊,没有经纬度的 打做异常处理,跳过就行了,简单的话直接做异常就行了,因为它远程办公的话,你还得去。呃,那,那你得去判断一下啊,判断一下它有没有内容。就这个 gps 返回的是个嫩啊,返回是个嫩啊,就这个地方返回是个嫩,返回的是个空的,就没有内容。 所以我们简单来说的话就直接做一个异常,因为对于整不影响大局啊,不影响大局,但你也可以直接做判断。哎, 判断他有没有那个内容。对啊,他返回的是不是有数据的?如果说没有数据的话,那你就表示他是一个远程办公的,然后说有的话我们就就提取, 咱们这里面就提取有的,因为少数服从多数啊,那这样的话,我们前二十页的数据就裁下来了啊,按正常来说的话,我们一页是十五条,二十页的话应该是三百条数据啊,我们来看他一共是拿到多少条数据啊? 看一下。哎,怎么滑不到最下面 啊?一共是三百二百九十九,就相当于我们整个只有一条数据是有特殊性的。不就三百条里面只有一条啊,这个就不影响啊,不影响, 你实在想知道是哪一条的话,你可以在这个地方打印一下啊。在哪里?在这里啊,可以打印一下 ppt job, 那你就知道它是哪一条数据了。好,我再给大家运行看一下这个效果。呃,不知道它这里面会不会有啊? 那这一条 看见没有啊?资深啊,资深。 python。 它是没有那一个经纬度的,发现没有,它这里话是没有经纬度的, 那它这个是没有经纬度。它没有,没有给啊,没有给经纬度,咱们说一个 gps, 好 吧, gps 看没有,它返回是个嫩, 那这里啊也有一个 gps 返回是个嫩。所以说你要判断一下这里返回的是不是一个嫩,返回是个空的话啊,返回是个空的话,那就说明我们对吧?就没有那个经纬度啊,如果说它返回有的话就有, 对不对?那你要去判断的话,也可以啊,你在这个地方嘛,提取一下什么呢?这个经纬度啊, 那我们这里写一下 gps 等于它 啊,一副我们那个 gps 啊,不等于那啊,不等于那的话,我们就取哪一个呢?取它啊,就取它, 否则的话啊,否则的话干嘛呢?否的话就是个嫩啊,如果说他不等于嫩的话,就是如果等于嫩的话就就就直接返回嫩,那这边的话是同样的啊,同样的一个操作。 哎,这个好像我复制错了 啊,他应该是这个。 如果说我们的一个 gps 啊,不等于什么呢?不等于一个嫩,那说明就是有东西,有东西就取它,否则就是个空的,那这边是同样的一个操作。 对啊,你就判断它是不是有啊,有的话就有,没有的话就返回一个空的,这样的话就可以了啊,这样的话就 ok 了, 那这样的话你就可以把所有的数据全部拿到了,就三百条,你要要么做判断,要么做异常处理, 那这样的话我就可以拿到三百条数据,现在是不是就三百零一了? 所以这两种方式的话都可以啊,都可以,就是在乎于你对这条数据你是需要呢还是不需要,你不需要的话就直接异常跳过啊,你需要的话那你就去做判断处理。 对啊,这个话就是一个三元表达式啊,三元表达式啊,当这一个条件成立的时候,我们就取前面的啊,不成立的话就取后面的。 这是一个三元表达式啊,前面是一个条件成立的,成立的话我们就干嘛呢?就取它啊,条件成立啊,然后不成立的话就是哪一个呢?不成立的话就它 啊,所以我们这边的话,有 gps 的 话,应该它有一个嫩的返回的,有些是空的 呐,看没有。这里的话有两条数据就是空的,它没有经纬度的啊,这个的话就是关于嗯,这个 boss 的 采集啊,然后这边的话还准备了一个格式化的,但这格式化的话, 格式化的话还是不讲了吧,哈哈,给大家看下效果就行了。格式化的话给大家看下效果就好了 啊,这是整体的一个把我们的数据做一个简单的 excel 的 一个效果啊。

挑战用爬虫爬一百个网站第十一期中国大学官网前端网页分析 来看到这个页面,今天我们一起来逆向分析一下,直接使用 f 十二快捷键打开开发者工具面板,然后呢在我们当前的这个网络的界面当中,我们要去进行这个抓拍操作,首先呢我们需要去刷新一下页面,然后再点击一下这个播放的按钮, 那么在下面的话就加载出来了相应的数据资源。然后我们看到这里的话是有一个 video 的 g o d 接口,展开来看它的这个响应数据信息,好是我想要的内容,那么我们观察一下它的在和数据,其实呢是有一个加密数据叫 signature, 哈,这个值的话其实很明显啊,我们可以去通过它的这个值的搜索方式。我们都知道嘛, 这一个加密数据的话,它无非就只有两种生成方式,第一个的话前端加密就是在这一个 g o d 文件里面去进行的这个前端, 另外一个的话就是从这个服务器那段返回过来的数据,返回数据第一个就是在我们这个 json 文件去进行的是加密。第二个的话就是我们呃通过对某一个接口去发送请求,然后在服务器那边生成的这个加密数据,然后返回过来的,再 作为下一个这个数据接口它的一个插入参数去使用。好,那么我们现在就可以去搜索一下,看一下它到底是 json 生成的还是说返回过来的,在这里面我们搜索一下, 那么大家可以去观察发现这里的话其实是有一个这个数据接口啊,他的这个响应数据就是我们的这个微调接口,他的这个查询参数,那么很明显这个数据的话他是响应过来的。 好,就是这个位置。所以说呢,我们接下来要做的操作就是说我们对着这个数据接口去发起请求,然后等我们这个服务器响应过来这个数据,再把这个响应的数据去做我们这个第二个参数,第二个这一个请求, 呃,请求接口它的这个参数去使用,然后再对我们这个服务器去发起请求,获取到最终的这个响应数据就 ok 了。好,那么我们就来看一下这个数据接口,它的这个载荷的数据信息有没有需需要去进行逆向分析的啊?所以我们在这里的话,很明显可以去观察到是有一个叫做这个丧尸的需要去逆向分析的。好,来观察一下,它是我们加密的生成呢。 这个逻辑在哪里呢?其实我们也可以去通过这个关键的搜索方式,比如说我直接去搜索一下,这个算好,我们可以在这里我们搜索一下,为了更方便去观察的话,我在后面加上一个这个冒号, 然后我们可以看到啊,第一个的话在这个位置他是一个复制的地方,所以说我们直接给他打上这个段点,因为我说呢,他不是这个加密的位置,像这个地方的话也给他打上这个段点啊,然后呢还有这个地方, 呃,慢慢的给他打一下这个断点吗?这个不是啊,这个的 max 是 我们的,这个什么我们都知道他是一个内置的这个标准裤啊。好,所以说呢,这个三十的话肯定不是我们想要的,那我们再来看一下这上面的话,还有没有这样的一个复制生成的位置呢?我们可以往下面去找一下,这一些好像没有了,这里还有一个叫做什么, 这个地方的话也打上一个断点。好,那么我们接下来的话直接干嘛呢?嘿,直接刷新一下当前这个页面,然后点击一下这个播放,看一下能不能断住。嘿,断在这里了,我们观察一下所对应的纸,是不是我想的很明显,不是吗?这里不是你想的这个加密数据啊,所以说这有断的话直接断掉,然后我们再释放一下这个, ok, 刷新一下界面,点击一下这个播放按钮。 哎,我发现没有断住,那我们再重新去搜索一下吧,搜索一下这个三个字,然后加上这个冒号,来吧,我们看一下。啊,刚才的话是没有断住,那么我们看是在哪个位置有没有漏掉他的这样的一个服务器生成的位置,这里的话,不是啊, 看一下这个地方,给他打成一个断点。 ok, 好, 这里的话也给他打成一个断点。 ok, 那 我们现在话再去刷新一下他能不能断住点击。哎,结果发现直接断在这里了, 然后我们观察一下这一个算值,它所对应的这个生成的值是不是我们想要的加密数据。好,没问题,就是这么个数据长度嘛,好,所以说呢,接下来我们直接来研究一下它这个传输的参数是什么?首先第一个的话是一个 i 的 值呢?这个可能是固定的啊,然后我们再来看一下这个的话 是一, ok, 那 像这些数据的话有可能是固定的,那么我们看一下这个 i 值,这个 i 值的话根据经验值谈的话,看到它的这个数据的特征以及数据长度 百分百是什么?是这一个时间戳。那我们也可以去溯源一下,看一下这 i 指它是在哪个地方去生成的,哎,结果发现是在这一个地方,那么很明显它不就是这个时间戳吗?好,没问题,就是一个 data data 然后 get time 的 这个方法嘛,那么很明显就是时间戳好,然后呢我们现在就直接来看一下这一个方法里面的这个加密逻辑是什么?点击跳转过来,结果发现它会跳转到这个位置,好给他打成一个断点来执行一下。那么大家来观察一下这个方法它返回的值是什么? 这是我们想要的这个加密数据吗?好,那么我们观察一下这里的话,它是使用的一个 q 二 pro g s 的 这个库啊,然后,嗯取到了它哪个方法呢? md 五,那这里的话其实就是一个非常非常标准的什么呢?哈希算法,所以说我们如果说想去模拟这个数据的话,我们应该干嘛?我们直接去使用这个标准加密算法库就 ok 了,就直接使用这个标准加密算法库去实现这个算法就可以了。 好,然后呢我们再去看一下它,这里的话其实有做一个混响,但是呢我们也可以去利用一下我们这个开发者工具面板的它的所对应的一个特性。哈,这里我们直接划拉一下这个数据,那它真实的数据就会显示在上方。好,这是一个 qq 群,那就是把这样的一个加密数据加密之后,加密完成之后,再去把它转换成这个这个这样的这样的一个显示,所以最终我们看到的就是 生成的这样的一个加密数据。好,没问题,那接下来的话,我们要处理的话,就是这个 i 值呢?这个 i 值的话是怎么去生成的?那后面的这个 m o c 的 话,它应该是一个固定的啊,因为我们当前的这个官网,它不就是叫做这个目客吗?好, 然后呢我们也可以去分析一下这个 i 值, i 值就在这前面去做的一个生成吗?然后像这些什么方法的话,就大家可以自己先去看一下它,呃,是做了什么样的一个处理, 你看一下这个啊,就直接点击跳转过来,然后可以去观察一下它,无非就是做了两个自创的一个拼接操作吗?还是比较简单的, 然后再看一下像这个的话,对吧?大家一个一个的去观察就 ok 了,点击调整过啊,无非也是做的一个自护窗的一个拼接操作嘛,所以说呢,像这个模拟的话还是非常简单的,然后 我后面的话就是我不一一做分析了,大家自己去体会一下。好,那么我们今天的这一个内容呢,就给大家讲到这,虽然说他是做了一这样的一个混响的一个处理的,然后是做,嗯,对这个书记的话是做一个拆分操作的,但是也没关系啊,这个的话是非常简单的,因为他就是一个标准的这个 m d u 的 这个哈希算法。好,那么我们今天就分享到这里。

挑战用爬虫爬一百个网站第十七知乎官网 g s 逆向易顿滑块验证码,大家好,欢迎收看明天学姐教爬虫,今天我们要聊的编虫话题是从入门到入狱的爬虫技术,知乎易顿滑块验证码,那么我们今天的话来看到这个页面,首先呢我们在这里面去输一下用户名, 其次呢我们在这里面去输一下这个密码,密码呢它是以这种密文的形式呈现的。好,我们直接点击一下这个登录按钮,那么可以去直接触发我们的这个滑块验证码, 大家仔细来观察一下啊,我们这个划痕验证码的话,需要我们去逆向通过一下,那么首先第一个我们需要去拿到的是这个验证码他所对应的背景图片,第二张的话我们需要去拿到他的这个缺口图片,之后呢我们就可以去慢慢的挪动,一直呢挪到我们的这个缺口的位置。好, 然后我们现在话就来逆向分析一下这个图片的话,到底该怎么给他成功的下载下来。好,直接 f 十二快捷键打开开发者工作页面。那么在当前的这个网络的界面当中啊,我们要做的第一个操作抓包怎么来抓呢?我们需要去刷新一下这个滑块拼图,来 刷新一下之后呢就可以去触发他相应的这个数据包,来我们观察一下这个 get 的 数据包,点击进来来观察一下他响应的数据信息。好可以去看到这就是我们想要的这个背景图片,以及呢还有他相应的这个缺口的图片。好,那么这样的话我们已 经成功拿到了,之后呢,我们再去分析一下这里有没有需要我们去逆向分析的一些加密参数,千万要耐住啊, 一个同学可能看到我们已经找到了他的这个数据包之后呢,就迫不及待的去写基础爬虫的代码了啊,所以说呢,我们在这个地方的话,直接切换到这个 sim 的 面板当中,然后观察一下有没有需要我们去逆向分析的这个加密参数呢?这里的话其实有像我们这个 f p 以及呢,还有像我们这个 c b, 还有呢像我们这一个,嗯, top 的 值都是需要我们去逆向分析一下的,那么我们今天的主要的目的呢,就是逆向分析一下我们的这个 c b 的 值, 好看一下怎么样才能够去找到它加密深层的位置。那么在这个地方,相信聪明的你一定会想到一种方式叫做关键字搜索,可以去在这个位置啊,去搜索一下这个 cd, 那 么我们现在可以去看到一共是有多少个匹配行,一共是有八百八十五个匹配行,这个的话貌似有一点多了啊, 所以说呢,我们也可以去换一种思路,比如说呢,我也可以去使用我们这个跟站追踪的这种方式,那么切换到这个启动器的面板,你可以去观察到啊,这里的话是有非常多的这个调用堆站的数据 信息的,好一个一个的来观察一下。首先呢我们可以去看到这里基本上都是这个点 m j s 的 这个文件,那么我们就直接点击进来来观察一下,好在这个位置的话给他打上一个断点, ok, 然后呢我们再去刷新一下这个返回验证码, 那么现在的话他就已经断住了,已经断住了之后呢我们再去跟站分析一下,那么在这个地方啊,我们先去看一下有没有我们想要的这个加密参数 c b 呢?哎, 可以去观察到是在这个数据里面是很明显的可以去看到我们这个 c b 的 值的。好,那么我们就网上去溯源一下来,我们再去网上去找一下,比如说这一个我们观察一下是不是我们想要的这个加密参数它的生成位置呢? 先来去看一下有没有这个值啊?好,可以看到在我们这个 log 里面是不是也是有我们这个加密的数据叫做这个 cb 的。 好,那么我们再往上去跟一下, 继续往上去走,那么走到这一个这一个地方的话,我们再去看一下有没有我们这个 cb 的 值,好像还是有的,对不对?那么我们就多走几步吧,看一下这个位置啊,有没有我们想要的这个值呢?好看一下啊, 我们切换到这个面板当中,哎,这个的话好像就找不到我们想要的这个 cd 的 这个数据信息了,是吧?好,那么我们再往后面去走一走啊,看一下这个位置 还有没有我们的这个 cd 的 数据将生成的地方呢?好,好像还是没有,那么我们再去看一下这个位置啊,这个位置的话有没有我们这个 cd 的 值呢?那你可以去看到这个的话,是有一个这是什么 log 的 这个加载,对吧?看一下前面的话,有没有跟我们这个 cd 生成的这个位置相挂钩的啊? 去观察一下就发现了他就是在这个方法里面,对吧?那他只能是在上一个方法里面去进行的这个调用了。好,再去看一下这个位置的话,有没有我们想要的这个 c b 值呢?来,刚才的话可能更的有一点快。呃,结果发现好像是没有。 好,那走到这一步的话,我们再去看一下啊,有没有我们想要的这个 c b 的 值呢?好像也是没有,但是你会发现他一直都是在我们当前的这个 v m 的 这个文件里面,一直在这里面走, 结果发现,哎,你是不是观察到了是在这一个位置啊,有一个这个 c b 的 赋值语句。好,我们直接给他打上一个断点,那么给他打上这个断点之后呢?我们看一下他到底是不是在这个位置去进行的这个加密生成。好,我们来释放一下这个断点,看一下他会不会走进来。先 把这个断点的话先给他删掉,来,我们再去刷新一下这个验证码,结果发现没有断住,那没有断住的话,他就不是在那个位置去进行的这个加密生成,对不对?好, 那我们这里的话,既然已经发现了有这个 c b 的 这种赋值语句,那我们何乐而不为呢?可以去通过这个关键词搜索方式吗?好,来搜索一下啊,结果发现它是在这几个位置都是进行了我们这个赋值的生成, 我们一个一个的给他打上这个断点,看一下到底有没有这个位置是我们这个 c b 值加密生成的地方。来再去刷新一下界面。哎,结果发现是不是在这个位置断住了?那么我们来观察一下这个方法是不是返回的我们想要的 c b 的 值。好,没问题,这就是我们想要的这个加密的数据信息。好, 那么我们现在就来观察一下这个方法里面他是做了什么操作。好,这个方法里面的话,他是在这里去做了一个 return 的 返回,那么我们再直行进来, 先进来之后再去看一下他的这个返回值是不是我想要的 cd 值呢?好,没问题。那么讲到这里的话,很多同学应该都已经知道接下来该怎么做了吧?比如说呢,你在这个地方可以去把我们这个方法把它导出来,然后跟他有依赖的一些方法呢,一个一个的给他扣过来,因为你会发现他的这个代码的话其实没多少,对吧?就这么一点 能说你扣个几百行这个代码呢,就差不多能够去把这个值可以给他得到了。那么我们还有一种方式啊,还有一种方式的话,就是把一整个的啊这一个文件把它拿过来, 那你可以先去看一下,这里的话是有一个这个变量以及呢还有这个函数。那么我们观察一下啊,这里的话有一个这样的一个方法,你可以去看到这个方法的话是我们的这个加载器的, 它是我们这个外帕克打包的这种加载器的这个管理模块,那么你也可以去看的啊,就下面的话,你折叠一下观察一下,它是一个这一个中画包起来的,它里面 所有的都是相应的一些模块,那我们就可以去使用这个外帕克打包的这种模式,去利用我们这个加载器去管理模块的这种方式,一整个的把它导出,然后再去进行这个补环境处理,也是 ok 的。 来看一下我们最终实现的这个代码, 这个话我使用的是第二种方式,所以说呢,这种方式的话他会,呃,就是有有一点小小的,有点 小小的,就是你看一下他这个代码的话还是比较长的,对吧?所以说呢,就可能可能就是不是那么的好用。那么大家的话就是不想使用这种方式的话,你也可以去使用这个扣 代码的就这种方式。但是扣代码的话也是比较麻烦的啊,你自己可以去尝试一下。那么我们看一下最终实现的这个代码,右键运行下看能不能执行成功。好, ok, 没问题,这就是我们想要的这个 c b 的 这个值,拜拜。拜拜。

这个爬虫太逆天,我都不敢告诉别人,我就简单贴个网址,他就能自动爬,数据速度又快又稳定,整个过程还能实时预览,爬完直接生成带图标的超详细报告,一键下载为 pdf, 连排版的时间都省了,直接拿去汇报。唯一缺点就是人一多,网站就容易崩。

哇,现在 ai 的 爬虫太可怕了啊。昨天我进我的小破网站看了一下,哇,后台这个什么 microsoft, 什么微软, oppo, ai 的, 谷歌的,什么曼塔的,什么一堆的这个爬虫,我都在爬我网站的数据, 想想我这个小网站有多大流量啊。对,像国内的话,我看了一下,有字节跳动和华为的啊,其他家没有看到。据说现在都爬啊,只是国内的这些可能名字也不规范,有时候流量统计不出来。 对,所以这突然给了我,我觉得 jeo 可能必须要开始关注了啊。 jeo 大家知道,就是以前有搜索引擎,然后获得一些流量,现 jeo 就是。 对,通过 ai 搜索。对,因为 ai 知识问答其实一样也会有流量来做这种流量的运营。对,但是 jeo 呢,其实和 seo 还是不太一样 啊。呃,对,因为以前 seo 呢,其实你看谷歌上我们搜一下啊,搜一个问题出来,一百页,哪个饭店的饭菜更好?一百页,其实你最多划到第三页,最后面就不看了嘛。 那现在 g u 呢,其实不怕排在后面,关键是你的质量啊,你有没有逻辑,你也面对质量高不高,你是不是在说一个事啊,如果你只是简单的对关键词,现在没有用啊,哎呀,直接给你扔掉了。对, 呃,所以我觉得最近 g u 必须要开始搞起来了,因为他这么大流量,这么去搜,肯定必然后面肯定在发生一些作用啊,包括 oppo 已经在尝试什么推软件啊,推这个购物啊,推什么点菜啊等等。对,那有没有人也在关注这块啊,可以多交流,要抓紧搞起来,这可能是一波真正的流量的机会啊。

做爬虫的朋友肯定都有这样一个疑问,为什么做爬虫非要用代理 ip 才能高效起泡呢?今天就给大家把这个问题讲透。首先,第一点也是最关键的,绕过反爬机制,网站会通过检测高频请求识别爬虫, 代理 ip 短时间内疯狂发请求,分分钟被封。而代理 ip 会轮换不同的出口,分散请求频率,直接躲开这个坑,要是再配合随机 user agent 和伪造浏览器指纹发送的隐蔽性直接拉满。第二,突破地域和访问限制,有些内容只对特定地区开放,用对应地区的代理 ip 就 能轻松抓取。 还有企业级 a p i 限速代理 ip 时,能多 ip 进行请求,速度直接翻倍。第三,提升并发和效率。接触代理 ip 时,多个爬虫起点能同时发请求,实现大规模分布式爬取,就像 scrip 加 radis 加代理时的组合,效率超高,还能做负荷均衡, 避免单个节点过载,爬虫跑起来会更稳。第四,容灾和稳定性拉满。要是某个 ip 被封或者失效,代理 ip 能自动切备用 ip, 爬虫不会中途断档,向电商秒杀这类高频请求的场景 ip 文化,还能减少单点风控风险。最后一点,实现数据采集的多样化。代理 ip 配合指纹修改工具,能模拟出多设备访问,避开网站的指纹追踪。社交媒体多账号操作时, 不同 ip 搭配不同的账号,还能模拟独立用户行为。总结一下,代理 ip 是 爬虫高效工作的核心工具,不管是绕反爬或限制,还是提效率、保稳定,都离不开它。关注艾米,每天分享跨境干货,让你少走弯路不踩坑!