这节课的话给大家带来的一个案例的话,就是用我们 python 去采集京东的商品数据信息啊,环境的话比较简单,就是 python 三零一零编辑器拍叉模块的话主要就是一个执行配置啊,啊,用这个模块不知道大家以前用过没有,有些同学说没有用过啊,有些同学用过的, 那么今天给大家讲的话就选择这个羽绒服的啊,对啊,因为最近降温了嘛。对啊,那我们就踩一下这个,那我们做爬虫的话还是一样的啊,按照咱们呃实现的一个基本流程来啊,实现的一个基本流程, 第一个啊,数据来源分析啊,第二个代码的一个实现步骤,数据来源分析里面的话,它分为,呃三步啊,不两步啊,一个是明确需求,还有一个的话是招播分析啊,这是我们这两个大步骤。 明确需求就是明确采集的网站啊,以及数据内容,就是先确定一下你要采集哪个网址上面的什么数据,就无论说你去做哪一个网站的数据采集啊,都是按照这个步骤来的 啊,网址的话我们应该这个的话应该也可以啊, ok 啊,这个,那就关于这个什么呢?京东羽绒服的一个商品信息啊,商品啊,这商品信息数据吧。 ok, 好, 这是我们的需求。然后第二个抓包,抓包的话那就是通过什么呢? 浏览器的开发者工具啊,分析对应的数据位置, 去找一下我们想要的这个商品相关的内容。他是在我们哪一个数据包里面啊?哪个接口里面?那这个的话他分为三步啊,第一个的话是打开开发者工具,第二步刷新网页,第三步通过关键字搜索查询,那就分为这三步, 打开的话,它就比较简单啊,你就直接在咱们的浏览器的页面中按一个 f 一 十二就可以了啊,刷新的话就不用讲了吧,就直接刷新一下就可以了。然后关键字搜索的话,我们就需要什么啊?啊,需要什么数据就搜什么数据就可以了。 好吧,那我们整体的一个操作是什么样子呢?我们先到这个页面按一个 f 一 十二, ok, 然后刷新一下啊,刷新一下,打开刷新, 刷新之后呢,我们去搜一下啊,点一下这个搜索,然后我们搜一下它的一个标题吧,波斯登,波斯登,二五年东,极寒 啊,就这样子吧,二五年东。好吧,那我们回测一搜的话,我们是就可以看到我们的数据所在的一个位置了,反正你可以不用复制完啊,就搜一部分也行, 点击这个搜索按钮啊,这个点击搜索按钮,然后第二步输入搜索内容 回车。我们的搜索内容的话就是以的什么呢?以这个标题啊,以标题中的一部分去搜啊,不用复制完,没有关系的啊,没有关系的。然后下面这个的话就是我们的一个接口,打这个接口一个 api 就它了。对,那我们点击进去看一下啊,点了之后的话它会跳到这一个响应,你看这个话是我们的一个数据啊,这个话就是我们的数据, 然后的话我们来看一下我们的数据在哪里啊?我们通过预览去看,它是在这个 data data 下面的话有个 list 啊,就这个 好,这里面的话就是我们的商品信息啊,零到多少呢?零到二十九,打零到二十九的话他就总计是多少,就是三十条数据嘛。对对,就三十条数据啊,可以看到啊, 来,那这里面的话就是我们相应的一些信息,反正里面东西挺多的,到时候我们就看具体要取哪些吧。好吧,但我们知道数据是在这个里面就可以了,好不好?那它的接口是哪一个呢?接口就这个就比较比较多啊,很长啊,很长一段的一个内容。 哇,那我们关于数据来源分析的话,大家应该没问题吧?就是找到他数据所在的位置。我有一个问题啊,就是其实我们在抓包的时候啊,这里要注意一下,我们抓包分析数据位置的时候啊,需要查看一下他响应数据中返回的数据数量 啊,注意一下,要看他的一个数据数量啊,我们其实像京东的话啊,京东的话他一夜 一页商品数据信息的话应该是多少条呢?六十条啊,他是六十条的一个信息内容啊,但是我们这里的话大家可以看到啊,他这边返回的是多少?零到二十九,他其实只有 啊,只有多少?只有三十个啊?三十个啊,他最最后面这个是哪一个呢?他标题在哪里?看一下。这标题在这里啊,我们来搜一下, 你可以看到,那这里的话有,其实它这里有显示的六十啊,看吧,它后面的话呢,还会要加载一个接口啊,还会再加载一个接口。就其实我们是有两个啊,就是我们一个页面的话有两个接口,一个是这里, 嗯,还有一个呢,我们来也搜一下,我们也搜一下它这个,比如说这个海澜之家的。 哇,我们搜一下它这个海澜之家啊, 你可以看到,那它也是这一个接口啊,它里面的话,呃,就是后面的这三十条信息,懂了吗?就我们正宗商品的话,它一页的话是有六十条商品信息啊,但它是分成什么呢?它是分成了两个接口啊,分成了两个接口 啊,有两个接口,但这两个接口长得都差不多啊,我们过滤一下,那这几个都长得有点像啊, 这个是第一个,然后这个是第二个,这个是第二个,这个是第一个,那后面这些的话就没有了啊,这里的话还有一个,但这边的话并不是我们想要的那个数据啊,那这里面也没有数据, 这个话也也没有什么东西啊,明白吗?所以说他是在两个接口里面有两个,每一个的话他是啊,每一个的话是三十三十条啊,三十条的一个信息啊,所以说有时候我们去做抓包的话,你一定要分析一下你所看到的这个接口里面他的数据是不是完整的, 不然等一下我们去获取的话,你会发现你拿不到完整的数据啊,所以说有时候需要注意下这个小的细节。 ok 啊,反正它两个接口是差不太多的啊,反正就里面啊,就里面的一些参数啊,它里面的这些查询参数会有一些不同。 看到没有呐?这个是配置二呐,这个的话是配置一,看见没有啊?这个是配置二,那就表示的是后面的三十条数据看到了。 ok 啊, 好,我们既然已经分析出数据所在的一个接口,之后的话,我们接下来代码步骤啊,代码步骤的话,我们由基本通常的话,我们可能会使用什么呢?会使用这个 request 模块 啊,会使用这个 request 模块去进行一个数据获取啊,它的话是分为我们的一个四步啊,哦,这样写吧, 发送请求,获取数据、解析数据和保存数据。但通过 request 模块的话啊,是按照这四步啊,发送请求的话,是模拟浏览器 对于我们的 u l 地址去发送请求获取呢,获取服务器返回的响应。数据解析的话,那就是提取我们需要的数据内容。保存呢,那就是把提取出来的数据保存到本地文件中 啊,就可以了啊,这是基本的步骤啊,但我们使用这个 request 的 话,大家知道它是一个模拟伪装啊,模拟浏览器啊,对于我们的一个接口进行一个请求,那这里的话就会涉及到一个问题,就是如果说网站啊 啊,如果网站它是进行了一些反爬的一些措施,那比如说像我们的一些加密参数,那如果说你要通过这个 request 去进行一个请求的话,那它接口的一些加密参数,你需要去做逆向 的,需要进行一个逆向,那像这个东西的话,是对于咱们的一个初学者来说的话啊,不友好,因为它的难度会相对而言啊,难度会偏大一些,那就像比如说我们京东这个网站有一个比较关键性的东西,就是这个 h 五 st 的 一个参数 啊,就这个 h 五 s t 啊,好吧,那这个玩意的话,它就是一个加密的一个参数啊,你要去做逆向分析的话,它是会比较麻烦的啊,去逆向解密的话啊,会比较麻烦, 不要麻烦,对,就我们说的对于初学者来说的话,他不是特别好,是不是?但我们又想要去获取数据,我又不想要去逆向,因为我,对吧?你说,哎,我作为一个小白,我刚开始学这玩意,我又不太会逆向,我又没学过逆向,那我又想要拿到他的数据,难道就不行了吗? 一样是可以的,这里的话我们就可以选择使用什么呢?这个专用配置啊,选择这个模块,这个的话它是一个什么呢啊?它是一个自动化的一个模块,是模拟人的一个行为对于咱们的浏览器进行相关操作 啊,进行相关操作,像我们 request 的 话是模拟浏览器去对于接口进行请求,那这个的话是模拟人的行为去操作浏览器,就相当于我们是使用什么呢?使用真实的一个浏览器 进行一个数据获取,但我用真实浏览器直接去拿,就是我浏览器我能够看到数据,我就全部可以通过这个模块给它获取下来,就不需要去逆向了啊,他有一定程度上的话是可以绕过什么呢啊?绕过我们的一些加密啊,绕过我们的加密可以直接获取数据内容, 他的话也是分为四步,那第一步的话他就不是说模拟软件了,而是什么呢?自动打开浏览器访问网站,让程序自动打开自动访问,然后去获取他的数据,然后再解析啊,然后再保存 啊,他也是分为这四步啊,只说我们去不需要逆向了啊,这两个模块唯一的区别的话就是在于第一步和第二步,然后第三步和第四步的话,他的写法代码都是一模一样的啊,都是一模一样的,只是说我们 获取数据的方式可能会有点不同,一个的话是做模拟啊,模拟浏览器,一个是我们直接用真实浏览器去进行获取好不好? ok 啊,这个话就是相应的步骤。第一步啊,打开浏览器访问网站,先导入自动化的一个模块,那先把这个模块方法给它导入进来, 然后呢?呃,实力话浏览器对象啊,也相当于是打开一个浏览器了,打 d p 等于一个什么呢?等于一个它啊,加括号,然后访问网站 dp 点上一个 get 啊,然后你把网址给它丢进来就行了。把它的这个网址放到这里啊,就这三行代码啊,就这三行代码,我们右键运行一下,它就会自动打开浏览器,自动去访问我们这个网站, 是不是?是不是打开了访问了?没毛病吧?啊?这个 d p 的 话就相当于是我们的那个浏览器啊, 好吧。啊,这个 d p 的 话啊,这个 d p 的 话就相当于什么呢?相当于我们打开了这个浏览器,所以说我们需要干嘛呢?我们需要啊,需要让浏览器得到一个网,访问一个网站, 那就相当于让 d p 得到一个网址嘛?让 d p 啊,得到一个网址,所以说叫做 d p 点 get, 打 d p 点 get 得到一个网址,那它就会对于这个网站进行一个访问啊,进行访问,所以我们在怎么呢?所以我们要操作浏览器的话,其实就是使用这个 d p 相关的一个方法, 对不对?我们操作打开的一个方法, 对吧?相关方法你要对于这个浏览器进行什么操作?那你使用这个 d p 里面相关的一些方法进行操作就好了,明白了没有?第一步的话是不是特别简单啊?特别简单 啊,重点的话是第二个啊?重点的话其实是我们的一个第二步啊,第二步的话是我们的一个获取数据,这个的话就相对而言的话稍微会复杂那么一丢丢啊,复杂那么一丢丢。获取数据的话,我们这边使用的一般叫做什么呢?监听数据包。 监听数据包,那什么意思呢?就是监听数据包的一个特征。特征当网站啊,当网站加载了,加载了该特征啊,该特征 相关的一个数据接口,可以直接获取返回的响应数据,可以直接获取他返回的响应数据,然后请出一个小的细节,就是一定要,对吧?监听的话一定要干嘛呢?监听一定要在执行动作之前 执行动作之前啊,你可以理解为就是在加载数据之前,你可以理解为是什么呢?在数据加载之前进行监听。 在数据加载之前啊,前一步就可以了啊,不用前很多步啊,不需要前很多步。前一步就可以了啊,前一步就可以了, ok 啊。那数据包的一个特征如何去选择呢?如何抉择? 但如何去抉择?如何去选择呢?我们刚刚是通过什么呢?通过抓包分析的话是可以啊,是通过抓包分析,已经知道了,对吧?我们的一个接口,接口的话是哪一个?就这个很长一段啊,很长的一段,我就我就不写那么多了,我就大概复制一部分就行了,太长了。 大概是这么一段啊,接口的话大概是这么一段,然后怎么去选择它的一个特征啊?这里的话有一个方法,对方法的话其实我们在开发者工具中的话有一个过滤的功能啊,就是我们有个接口过滤的功能, 其实我刚刚已经给大家试过了啊,给大家用过了,就有个功能过滤,就你可以复制什么呢?链接中的一段参数啊,一段内容啊,然后进行过滤筛选,查看我们的一个开发者工具中 实际返回的一个数据情况啊?什么意思呢?那我们刚刚按照全部的话,他不是这样子的吗?这里有三百多个请求,对不对?我们通过抓包分析的话,我们是不是看到他的接口是这个?我刚刚是不是在这里是做了一个过滤吧? 那这句话是可以过滤的啊?就这个地方啊,就这个地方。 那比如我们试一下这个,那我就用这个,你看他是不是过滤了,过滤的话也比较多啊?但是有几个他是没有东西的啊?有几个没有,但我们要的话只是这这几个这两个, 但像这个没有啊,这个也没有,这个这个有,这个没有,这个也没有东西啊,这里面有东西啊,这个里面也有东西,但是 对吧?最好是唯一的,就是我们监听的接口最好是唯一的,但如果说不是唯一的也没没关系啊,也没办法,因为他网站的话,他可能返回很多类似的一个接口,他不是唯一的也没事啊,也没关系啊, 就是呃,监听的一个,监听的它的一个特征的话,最好是唯一的啊。唯一的啊,不是也没关系啊,不是也没关系,也没有关系啊,那只是说最好的选择是唯一的。好吧,那我们来监听一下啊,那我们在访问之前啊,我们先监听数据包 啊,先监听 d p, 点上一个 listen, 点上一个 star, 那那我们就把这一段给它复制过来啊,就监听这么一大串啊,监听这么一串,然后访问网站,访问网站之后的话,我们等待数据包的一个加载, d p, 点上 listen, 点上一个 wait, 用一个变量名去接收。 那这里的话会有个问题啊,如果说我们就这么去写的话,它默认是监听什么呢?如果这样写的话啊, 这里的话它是默认啊,监听一个,那也就是首先加载出来的啊,就是第一个加载出来的一个接口, 那默认话是监听一个啊,然后是第一个加载出来的啊,好吧,然后获取响应的数据啊,获取响应数据 给大家看一下, 那我们来运行一下它这里的话,就会呃,获取它的响应数据嘛,就我们监听它返回了,返回了我们可以直接啊,直接拿到它响应数据,你看到没有?这里的话是可以监听到 啊,它是可以监听到我们的一个数据,你看这一个 a b b 什么玩意的啊? a a b a b b, 对 不对? a b b, 那 跟我们这里看到不是是一样的吗?那可能在这里给大家看会好一些, 那 a、 b、 b、 u r 是 不是一样的啊?但是我们这样写的话,它会有一点点问题啊,会有一点点问题在于什么呢啊?在于的话我们刚刚跟大家说过啊,就是我们整个 页面,我们整个浏览器的页面,他是有多少条数据?六十条,对不对?我们现在这样子监听的话,是相当于我只是拿到了前三十条数据, 这个能理解吧?好,那我现在想要去获取什么呢?把整页的数据都给他拿到,整页数据都给拿到的话,他是需要做一个下滑,让他后面的三十页数据加载出来 啊,要让他后面的数据加载出来。所以我们在访问的时候啊,访问的时候我们可以做一个下滑页面,让整个页面数据啊,页面数据加载完整, 那 d p 点上我们直接用这个啊,我们直接用这个啊,看下他能不能下滑啊?这个是下滑到底部啊,将来整个页面的数据,将来整个页面的数据之后的话, 但我这里监听的话还是一样的,我们说过这样的话只是监听一个啊,他加出来还是第一个,就还是拿到三十个。所以说我们在这里地方的话要设置什么呢?要监听多个接口, 要监听多个,因为我们加载之后的话,你比如说我们啊,给大家看一下,我们先清空啊,你让我监听这个,我访问这个网站, 对吧?他会先返回我们第一个值,返回我们第一个接口,对不对?他这里只有两个啊?第二个是没有的吗?第二个是没有的啊,然后第一个是我们的一个前三十条的一个数据信息,对不对?那我们现在的话要给他下滑到底部啊,下滑到底部的话,你可以看到他加载的 一二三四五六七八九十啊,加载了十个,对不对?但我们想要的话是哪哪两个?这两个就前几个啊,就相当于前五个吧。前四个啊,前四个的样子 对不对啊?前四个的样子,所以我们这里的话就监听四个就可以了。好,我们可以先试一下监听四个啊,监听四个的话,我写了一个四的话就表示监听四个啊, 那表示啊,监听什么呢?四个相关的一个接口,因为这里是多个,多个的话他会返回一个什么呢?返回一个列表啊,多个的话他会返回一个列表,这里的话就是个列表了。列表的话那我就不能直接去获取了,所以我们得去做一个基本的循环, 这里返回的是个列表,那么要做个循环啊,负循环啊,印它,我们再进行一个获取啊,给大家看一下 啊,再再给大家看一下,我看它能不能下滑成功啊?嗯,好像它没有下滑, 对,他是不是没有下滑?好,可能大家会在这个地方的话会有一个问题,就是,呃,再给你们看一下啊,看看一下这个效果啊,来,我运行一下,把这个浏览器打开给你们看啊,他先访问, 访问之后加载了数据,但是啊我们这个地方是不是没动,是不是没有动静 啊?这里的话要跟大家说一下,就是我们,哎,访问了网站啊,我们监听了数据啊,但是呢有个问题啊,但是没有结果,没有报错, 没有结果啊,也没有报错啊,这句话原因在哪?什么原因是在于我们是,首先我们是监听什么呢?监听四个接口对不对?监听四个就是我要要网站加载了四个这个接口,我们才能有返回数据。如果说他没有 啊,他是建立了四个接口,如果啊网站没有加载四个出来,他就会一直等,会一直等待他的一个加载啊。你一直没加?他一直等,一直没加,一直一直等。那没加的原因是在于什么呢?没加的原因是因为我们做了一个下滑,这个下滑没有反应。 对,我们说过啊,你看我这里手动给他下滑一下,我手动下滑, 哎,我手动下滑,你看他加载了这么多,所以说他他就返回了这么多啊?他加载了那么多,所以说他就返回了这么多, 对不对啊?但是因为我们刚刚是没有让他下滑,他所以说他没有加载出那么多内容,所以他这里就没有返回数据, 好吧,所以没返回数据,明白没有?所以说我们刚刚为什么运行他是没有反应,但是他也没有包错,一直卡在这个地方啊,当然我们也可以去做一下处理。 韩朱老师,那,那万一,那,那我不能说让他如果说一直卡着,那也不太合适,对不对啊?其实如果说遇到一些特殊情况啊,遇到一些特殊的一些情况,可以使用一个什么呢?可以多加一个参数啊。多加一个参数就是一个叫什么呢? trimout 啊,他们 out 这个参数这里对应的,比如说啊,就他们 out 三,就是当等待,是吧?超时就是连接超时吗?这是连接超时的意思啊?连接超时就如果说我监听超过三秒,超过三秒还没有返回, 还没有,还没有监听到啊,还没有监听到接口,那我们直接就是报异常啊,报错就直接报异常,那就让或者说你直接结束掉整个程序都可以啊,结束掉整个程序都可以,这是有时候有些特殊的情况可以会用得到啊,会用得到。 好吧,所以我们现在的主要原因的话是在于这个下载是没有用的啊,下载是没有反应啊,下载没有反应的话,呃,那我们就得换一种方式去做一个下滑了,那我们就得换一个方法,我们可以看一下啊, 我们来看一下啊,看一下他,我们下滑的话怎么去定位会比较好一些?嗯?看到没有啊?他有个这玩意,他会有一个下一页 看,不知道大家有没有注意到?我划快一点,我再刷新划快一点,就是他会有一个下一页的这个标签, 看到没有呐?就是我,我划到这里的话他会有一个下一页啊,下一页的话他会有一个这个,那我们就可以让。嗯,那我们就下滑页面啊,怎么去下滑呢? d p 点上 e l e text 等于下页啊,等于下页。那我们这里来一个什么呢? next page, 那 么 next page 点上它点上 to c, 这个是什么意思啊?这个下滑的话是一个什么东西啊?这个的话是定位什么呢?定位啊,通过我们的文字定位啊,通过我们的文字啊进行一个定位,定位到下一页的这一个位置啊,下一页的这个位置啊,就是获取下一页的一个元素, 然后 to c 的 话就直到什么呢?直到页面中,就是让我们这个下一页的这个地方啊,就是让下一页这个位置啊,可见啊,就让我们下一页的这个位置啊,可见就相当于我们一开始的话,可以看到啊,我们一开始的话是什么样子的? 我们进入到这个网页,他下页的时候在最下面,在最下面,对吧?我需要让这个网页把下页的那一个位置放到我们的屏幕当中,对,你是不是要下滑下来?你看看到我们这个下页的时候,他就会加的更多啊,就是这么回事啊, 就是以这种方式做一个下滑,以这种方式做下滑,然后呢我们这个数据包的话不要监听四个了,监听五个,为什么呢?因为你监听四个的话,你会发现他一二三四啊,只有这个是我们想要的接口,后面这三个都不是啊,所以我们还是监听五个,多监听一个来,我们再运行一下,看下他会不会下滑, 哎?是不是下滑了?哎?是不是加载了啊?是不是加载了?那这个的话这一个和这个啊,就是我们的一个,这两个就是我们的接口, 那这样的话我们就加载了五个接口出来五个数据包,但这个和这个这两个是我们想要的啊,这两个是不想要的,其他的不是啊,其他的话就不是的了。其他的不是的话,那我们得干嘛呢?得做一下处理吧, 对吧?因为我我只要这两个玩意就行了,对吧?你其他的话我就不要了啊,所以我们这个地方的话,我们可以去获取一下。获取一下什么呢?获取一下我们响应数据的一个 key 啊,也就是它的一个键啊,获取它的键,对不对?那我们就一个 ts 等于接声 data 点上 kiss 获取,我们这个是一个字典嘛? 那或许它里面的键啊,然后我们去判断一下,因为我们想要的数据是 a b b 啊,才是我们要的那个商品信息的一个小数据啊,那像这些的话都不是我们商品数据信息啊,所以我们在这里判断一下啊,一夫 这个 a b b in 我 们的一个什么呢? key, 但如果说我的对啊,我的这个数据里面有这个 key 啊,我们我们就干嘛呢? 那就是我们这个数据里面也含有这个,那我再去取他的数据,我才要,我才要他的一个数据呢,因为没有的话就不是我们想要的信息嘛,这样的话我就单独把什么呢商品信息给他拿出来了啊。判断啊,判断我们 的一个商品接口啊,是商品信息接口数据,就单独拿这两个就可以了,懂了吧?好吧,那这边的话获取数据的话就是这些东西啊,这些东西啊,就是一些小的一些东西 哇,这的话就是第二波获取数据啊,所以说这获取数据的话,我刚刚说过会稍微麻烦一点啊,稍微会麻烦一点,但是你这个麻烦的话比什么呢?比你去做逆向的话还是要简单很多很多的,还是要简单很多的。 如果说这个麻烦程度是十的话啊,那逆向的麻烦程度起码是个一百五啊,起码是个一百五, ok, 没问题是吧?好的啊,没有问题的话,那我们接下来的话就解析数据了,那解析数据的话,这个就比较简单了啊, 那解析和保存的话就相对于就比较容易了,因为我们拿到的它是一个节省数据啊,拿到的话是个节省字典,我们就直接字典取值就行了。 哎嘿,好,我们清空啊,看个新的吧,看一个新的, ok, 我 们想要的数据的话啊,我们 是啊,我们就置顶取值就可以了。置顶取值也就是键词对,取值,根据冒号左边的内容提取啊,冒号右边的内容。 好,我们现在想要的数据的话是在哪个呢?在这个 list 里面啊在这个 list 里面啊。所以呢我们首先啊提取什么呢?提取商品信息所在的一个列表,然后进行负循环变例。那 for index in, 我 们的一个接收 data data 取哪个呢?取这个 list, 打这个 list 的 话还是个列表嘛?返回列表的话我们就直接给它进行循环了啊,给它进行循环,循环之后的话啊,对吧?我们就取具体的内容嘛,对不对?那我们这边的话打印一下,导入一个格式化输出的模块 格式化输出的一个模块。 嗯,为了方便我们去进行一个数据的强制退出啊。答案一个强制退出啊,为了方便查看我们的数据效果啊, 它返回的是不是有点太多了? 这里来个 break, break 一 啊,然后我们循环一次,我这里再来一个 break 啊,循环一次,再来个 break, 那 我就不退。嗯,这样子吧。啊,这样的话就可以了,不然太多了。你这打印的也太多了。 这这也太长了呀。哎,太长了,我不在这里看了我不在这里看,我在这边看。算了,太长了,它这个数据返回的话太长了。 他这一个数据。我天老爷,这么多,你看这么多啊,这后面还有啊,太长了,太长了,我就,我就不这样子写,我不是不让这样看了,我这样子看,我直接去写了。那我们啊 d i t, 比如说我们的一个标题啊,标题啊,我直接这样子在浏览器里面去看了,因为打印出来太长了。标题的话是这个内,这个的话就是它的标题啊, 北面王, 这个的话是它的标题,我们直接写一下标题,标题有了之后的话,我们看一下基本的信息啊,还有什么东西是可以获取的?这个是标题。 这个里面是什么?看不出来,这个里面是吧?这个里面有个价格啊,三百九十八,三百九十八的话是他的一个价格,这个是价格吧?啊?这里的话有个三百六十八啊,这里面有个三百九十八, 那这个三百九十八的话就是他的原价。对啊,这个三百九十八的话就是他的原价啊,那我们就给他拿一下,那这个的话应该就是他的原价, 原价里面的话一个一个,一个。这个 price, 它的原价的话是三百九十八。 ok, 然后这里的话有个 id, 这个 id 不知道是啥,然后我们总销量是一千加的,已售一千加啊,这个是我们的销量, ok, 就我看到啥我就取什么呢?我就。嗯,大概瞄一眼它是什么数据啊?因为具体的啊,这个是 id 啊,这个 id 的 话可以拿一下 商品 id 啊,商品 id 的 话可以取一取啊,然后这是店铺名字对吧?店铺 图案这些的话,纯色的,常规的,厚度,鸭绒的,你这个如果说需要的话,你可以自己选,我就不拿了,哎,这里还有一个价格,三百九十八啊,要不拿这个吧, 要不拿这个吧,我原价的话我还是拿这个吧,感觉拿那个会有点问题啊。三百九十八, ok? 嗯。这里面有什么东西?这里面什么东西都没有啊。嗯,这里还有个三百九十八,我不知道他具体哪一个是原价,反正挺多的就无所谓的。嗯,然后我们再往上看,那这里还有个三百九十八。你这里显示的还挺多。 那三百六十八在哪里啊?三百六十八在这里啊。到手价啊, 这是我们的一个数奖啊,在这个里面三百六十八, 对吧?那前面有没有?还有还没有三百六十八的。这个五百加是个什么玩意? 这个评论的一个数量吗?还是什么?如何模糊?这个是什么意思? 模糊?这个不是评论的意思吗?评论模糊啊,评论的话大概有五百条吗?看一下,看他是不是有五百条评论 啊?是的,那这个话就是评论数量啊,那这个话就是评论数啊,评论数量啊,评论。 评论的一个数量是五百条啊。五百条。然后 closed 啊,这是我们的颜色,就衣服的面料颜色啊。就是这个我也不知道叫啥,反正它上面写了个颜色。那我也不管它了, 反正我就看到什么取什么,这个因为我它的数据还是比较多,因为因为这个的话就大家知道怎么去取就可以了,因为每个人可能要的数据不一样啊。 啊?差不多的话好像貌似的话就这些东西啊貌似啊,貌似的话就这些。我们来打印看一下这个 d i t。 啊,看我们取到的数据有没有问题啊?有问题的话我们再去做处理,看一下数据有没有问题。 ok, 出问题喽,当我们一二三四一二三四五啊,当爬第六个的时候啊,他有问题。对啊,售价没有售价啊,返回的是个内啊,没有售价啊,为什么第六个没有售价呢?我们来看一下第六个, 第六个的话缩影位置就是五嘛?对,缩影位置就是五,五的话是什么?五的话这里面没有。那我们还是得按这边来看。 零一二三四五啊,这个对啊,这个话叫做已补啊,已补九十块钱, 这一补九十块钱它是没有售价啊,没有这个玩意。嗯,我们来瞄一眼啊,把这个打开,把这个打开,还是以我们实际的啊,以这个实际的为准, 我们再来运行一下啊。 ok, 零一二三四第五个。好好,我们来看一下它第五个, 第五个里面的话他没有哪个呢?没有这个售价,没有这个 他直接叫做这个啊,直接就这个价格。那这个纸有吗? 这个纸好像没有啊。 嗯,那这里的话如果说那我们就得改一改了哟,那我们就得改一下了啊,因为他有一些是什么呢啊?有一些是直接的那样子价格,有些是 有些是有原价的,它这里没有原价,它只有这个啊,那原价就是售价,售价就是原价。那这边的话就得去判断一下有没有这个玩意啊?有没有这个玩意,我们来写一下啊。 if index 点上什么呢? 怎么这么麻烦?直接啊,简单粗暴 啊,简单粗暴,我看他有多少条这样的数据啊?看他这样的数据多不多,多的话我就再说处理,不多的话我就不管他了。 简单粗暴,一二三四五六七八九啊,就相当于我们一页的话有九条,六十个里面有九条,那频率还挺高的频率挺高的话我们还是做一下判断。频率还是比较高啊。如果说啊, index keys, 那 我们还是得去还是得去做一个基本的一个判断啊?做基本的判断啊。如果说啊,如果说我们这个存在啊,这个油 啊,有的话,那我们的价格啊,那我们的一个价格,我们的售价啊,我们的售价就等于哪个呢?等于它等于它。否则啊,否则 else else 的 话,我们售价就是原价啊售价就是原价。 这啊,或者说用它里面的哪一个呢? 用它里面的这个也可以啊。京东的价格,那用它这个京东的价格。好吧, 这个话就收价就做一下处理啊,因为数据量比较多的话,那么就处理一下,不多的话就不管它了。哎,不是啊,这个是原价啊。靠, 是这个有啊, 应该是这个吧, 然后售价我们统一用这个代替。 哎,是这样子吧。 好吧,这样的话就可以了,但这个价格不就一样的了吗?对啊,这价格不就一样的了吗? 是不是?哎,他是哪一个价格没有来着?是这个价格没有。不行,我还是得要看一下他的报错啊。 我还是要看一下他的报错。不看报错的话,等一下我就不知道他是哪一个是没有要做处理的来着 啊。是这个,这个的话,返回是个空的。那,那的话啊?其他是个空的。没有这个啊,是有这个东西,但是没有这个玩意。 ok, 那我们应该是取的哪一个呢?取的是我们这个里面的 这个里面的,然后呢?判断他在不在,他不在的话那就直接取,就相当于他的售价和原价是一样的,就售价和原价是一样,原价是他如果说在里面的话,哎,那我们就按照这个去取, 按照这个去取啊,如果说不在啊不在的话就是原价,原价就是售价,售价就是原价,那就按这个来就行了,对不对?没毛病, ok, 那 走你没毛病啊。 ok, 那 这里的话有个问题啊,取它的话是空对象,空对象里面没有这玩意, 我要骂人呐。哎,所以说像这种数据的话你得去做各种各样的一些处理啊。零一二 主要他不能单独拿出来看,你知道吧?他不能单独拿出来,单独拿出来的话我就好看一些,不然我要这样子一个个去看的话,我觉得太麻烦了 他不能单独一个个去看的话,我觉得太麻烦了,他不能单独把这个玩意给他复制过来, 哎,管他嘞,再看一眼这个返回的是个空的,哎,其实我不想处理一下这玩意了,我真的是真的是。 ok, 我 看一下啊, 第一个里面是有的啊,三百六十八啊,第二个里面啊,也有的,第三个,第三个也有 有啊,这个也有啊,这个也有啊,他哪个是没有的? 但我就不要它原价了,我直接要售价就完事了。我只要现在价格是多少就行了,我就不要它原价了,它原价不原价。感觉 第一个是有的,第二个也是有的。第三个啊,这里面都是有的,但你搜这个话都是有的, 那还是没问题啊,那还是取的它呀, 取的这个取的这个里面判断它有没有啊?如果在里面的话就取啊,不在里面的话我就取这一个。那是没问题的呀。啊?把这个改一改,这个没改, 那前面可能我这里没改啊。那这里还出现这玩意。 算了,我管你有没有,不要了, 对吧?我管你有没有,我只要当前价格就行了 我管你有还是没有我只要当前价格。它原价是多少我管你多少。对啊,我只要现价就行了,现在一个价格 现在价格是多少就是多少。他原价跟我买东西有什么关系?跟我没半毛钱关系。 你没有就没有,有就有,没有就算了。你不给我优惠我不要了。 你不给我优惠我不买了 啊。主要他这个数据看起来太乱了。 对啊,我们正常就直接去拿数据就完事了,管他那么多花里胡哨的东西。对啊,太多花里胡哨的。然后把这些东西给它替换一下啊,它里面这个标题的话,有些东西可以删一下的,然后这里面有些标题的话有各种标签,我们可以给它删一下。我们来写一写 导入正则表达式模块 print r e, 这个的话用不到了。嗯,标题的话我们来处理一下啊, 点它 r e, 点上 s u b。 对 啊,我们有这玩意的话就给它替换一下啊,把这个东西给它替换一下。 有有这个东西的啊,就给它替换一下点,行吧,将你把这个标签给它删一删。 嗯,不能这么写,还有这个东西的给它替换一下。 ok, 把它标签里面的这种东西给它删掉。就是有这种标签的给它删掉,不然看起来不舒服。 ok, 这个是我们正常的数据啊,正常的一个数据拿到之后的话,我们直接来保存啊。保存的话我们导入一个 c s v 的 一个模块, 这个保存的话是固定写法,固定写法 就没有什么特别多的。创建一个稳定对象, f 等于 open data 点 csv model 等于 w encoding utf 杠八,右键写入的方法, ok, csv write, 然后我们写入表头 hand, 写入数据点 t。 好, 这样的话我们就可以保存了啊,那我们看一下我们保存的那一个数据,对,它点 c s v 的, 哎,这个, 然后这是我们采集到的数据信息。
粉丝3.6万获赞8.6万

哈喽,大家好,我是阿帆,最近呢也有很多商家朋友在私信我问我应该怎么样去看竞品的一个历史价格,那么今天呢,就教大家一招,首先找到我们竞品的链接,然后在京东首字母后输入三个 v, 点击回车就可以进入到这个界面,然后我们就可以看到精品的一个历史价格的变动,同时也便于我们分析精品的一个运营策略。

还在为整理京东订单烦恼吗?立即下载魔猫京东,让订单管理变得简单高效,轻松导出所有京东订单。支持自定义时间范围,一键获取订单号、下单时间、店铺信息、商品名称、数量、金额、支付方式、 收货人手机号、地址、订单状态、所有重要信息一个不漏。 支持 c s v 和 excel 两种格式,导出 c s v 格式,方便用 excel 打开分析, excel 格式原声兼容格式更完美,表格化展示一目了然, 分页浏览再也不怕订单太多卡顿。固定表头滚动时,标题始终可见。适合个人记账、报销凭证、库存管理、安全登录、数据本地处理,隐私有保障。支持 windows 和 mac 系统。
