码迷,mamicode.com
首页 > 其他好文 > 详细

爬虫从入门到放弃(四)

时间:2019-09-30 16:39:05      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:png   ids   --   lis   rank   aries   天才   朋友   sele   

哈哈月初的时候老大给我下的爬虫“初级”任务,到九月的最后一天才开始搞??

哎国庆前一天还要上班,真苦逼,只能搞搞爬虫玩一玩了233

ok,进入正题,今天要爬京东图书的数据,所有的图书。这次没有限制,随意发挥,想用什么库都可以,只要能爬??

1.初步分析

既然是要爬所有的图书,那么就得找到所有图书的分类列表,因为分类列表肯定是有全部图书的分类,这一步就可以得到分类list。

进入京东图书,在左边导航栏的最下面有一个全部图书分类的入口。

技术图片

可以看到真的巨多分类。。。。

技术图片

随便点几个分类看看

技术图片

技术图片

技术图片

从这里得出,每一个分类都有它的专属tid,前面的cat参数是可以去掉的(去掉不必要的参数),看似有一个tid递增的规律,但是后面点多几个分类发现,事情并没有那么简单。

当我打算把小说分类里面的所有分类都点一编验证这个规律的时候,就发现了”异类“

技术图片

技术图片

那我就好奇了,那tid3306是谁?我手动填了tid=3306,居然是科幻小说后面的一个分类。

技术图片

得知以上信息,我有了个思路,能不能把起始tid和结束tid找到,那么拿到所有图书分类list就轻而易举了。(ps:方法思路千万种,比如selenium什么的,只要能实现即可!)我就去点了一下最后一个分类,看了看他的id,猜测他就是结束的tid。

技术图片

为了验证,我继续把tid往上加,加了好几位数发现这个确实就是结束tid了。找到结束tid,就顺便再验证一下起始tid。

这个就是第一个坑了,因为第一个分类的itd并不是起始tid,那么可能这个思路就是错的?

这个时候就有了新的思路。把全部分类的列表网页源代码看了一下,有惊喜了。

技术图片

图上框柱的就是每一个分类的tid,只要我们用正则把tid获取下来,那么所有分类的tid就可以拿到了。换言之,图书分类 URLlist也拿到手了,那么第一步分析就完成啦!

获取tid正则tid = re.findall(‘list.jd.com/.*?-.*?-(.*?).html‘, a)

2.分析分页url

总页数可以在页面源代码上看到,这个正则拿一下就行

total_page = re.findall(‘共<b>(.*?)</b>页‘, a)

技术图片

然后找一下分页的url变化,随便选一个分类,查看前几页的url

https://list.jd.com/list.html?tid=3297&page=1&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main

https://list.jd.com/list.html?tid=3297&page=2&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main

https://list.jd.com/list.html?tid=3297&page=3&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main

可以看到,url的参数仅仅是page变了,tid就是图书的分类,其他的参数去掉也是可以的。那么我们的url可以简化为

https://list.jd.com/list.html?tid=3297&page=1

ok,第二步就搞定了

3.提取数据

这里的话比前面的难度稍大一些,但是问题不大。??

我们要提取的数据如图所示,书名、价格、评价数量、出版信息

技术图片

因为是边写这篇文章一边分析的。。所以做到这步的时候,刚好中午下班,吃了饭睡了个午觉才继续来肝。这一步分析了30分钟,终于有了突破性进展了??(好菜哦)

我们先来康康要提取的数据是不是动态加载的,如果不是那就最省事了,直接从页面xpath提取即可。

先把这个价格的类名复制,在网页源代码中搜索康康。

技术图片

行吧,空空如也,那就是动态加载的数据。

技术图片

我不死心,去看了看商品详情页的价格,然而也是动态加载的。那只能去找找js了。。。

本来不是这个思路的,后面那个思路没走通才来找这里的js,所以也是花了点时间试错,但是问题不大,总归是找到了。

技术图片

这里我们要关注的几个参数分别是id、m、p

id:图书的skuid

m:图书的定价

p:图书的京东价

技术图片

商品详情的url中的那串数字就是上面的skuid。京东价和定价也是和js返回的一样。

这边又找到了图书评价数的js

技术图片

剩下的图书名和出版信息都是可以在源代码中找到的,四个数据提取问题都解决了

先把获取价格和评论数的接口放上来(都是GET请求)

获取价格接口:
https://p.3.cn/prices/mgets?skuIds=J_11711801%2CJ_12160627%2CJ_12041776%2CJ_11982172%2CJ_12216733%2CJ_12312047%2CJ_12213837%2CJ_12174923%2CJ_12577886%2CJ_10199768%2CJ_11711801%2CJ_11982170%2CJ_12182317%2CJ_12371485%2CJ_12217595%2CJ_12370112%2CJ_12403862%2CJ_12684700%2CJ_12184621%2CJ_11439872%2CJ_12354843%2CJ_12290386%2CJ_12167292%2CJ_11800268%2CJ_12670276%2CJ_12505366%2CJ_11837713%2CJ_12288371%2CJ_12547666%2CJ_12400655

获取评论数:https://club.jd.com/comment/productCommentSummaries.action?my=pinglun&referenceIds=12508277,12090377,11757834,12192773,12533325,12568226,10960247,10616501,12018031,12174897,12629538,12262747,12155241,12174895,12173835,10019917,11711801,12512363,12108531,12052646,12490025,12461181,11716978,12213869,12489747,11982184,12430144,12052514,12271618,10367073

这里多余的参数我已经去掉了,可以看出,基本上只需要skuid作为请求参数就可以获取到我们想要的数据。最后只有一个问题了,那就是skuidlist怎么获取。

从图书详情页和图书列表页的网页源代码得知,skuid可以用正则或者xpth提取出来。所以这一步也已经完成了!

技术图片

4. 代码

在敲代码之前,我们重新整理一下思路。

  1. 先把tid(图书分类id)获取,生成tidlist
  2. 拿到每一个分类的total_page,生成urllist(这里的url就是当前分类的每一页图书列表url)
  3. 从urllist中提取skuid,生成skuidlist
  4. 提取数据
  5. 存入数据库

根据这个思路,其实大家就已经非常清晰了,代码也不难,大家可以根据自己的实际情况,去选择使用框架或者原生requests去完成。

想要贴主的该次爬取的完整代码,可以在文章下方评论,留下你的邮箱地址~

下一篇爬虫系列文章,会讲到如何使用多进程+异步(协程)增强并发性,还有代理池等等干货,喜欢的朋友给个关注博主吧~????

爬虫从入门到放弃(四)

标签:png   ids   --   lis   rank   aries   天才   朋友   sele   

原文地址:https://www.cnblogs.com/x1you/p/11613177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!