爬当当各分类下的五星图书

报名了爬虫课程,断断续续学了两个星期,才看完第一章。虽然技术还很菜,但一些基本的东西能够爬取了,也想趁这次作业,来尝试一下这段时间学习的知识。

这次作业选择爬取的网站是当当网,一方面是因为传说比较简单,另一方面也有比较多的图书数据,特别是五星图书,包含了各个领域最受欢迎的图书信息,对于寻找有价值的图书、分析好书的一些情况具有一定的价值。

废话不多说,先上准备爬取的页面链接:

https://link.jianshu.com/?t=http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-all-0-0-1-1

具体的页面如下图:

当当五星图书页面

我想爬取的数据是各分类(小说、中小学教辅、文学、成功/励志……)下面的五星图书信息(书名、评论数、作者、出版社、出版时间、五星评分次数、价格、电子书价格等等)。

为了抓各分类下的图书信息,首先看看点击各分类的时候,链接是否发生变化。经过测试,在不同的分类,链接都是不一样的,事实证明不是JS加载。

于是,第一步就是要获取不同分类的页面链接,先以“小说”类目作为样例来测试一下,复制xpath信息并获取链接。

复制"小说"类目的xpath信息

得到的xpath如下:

按照固定的套路,尝试获取类目标题和页面链接:

顺利地得到了类目的名称和链接:

尝试获取各第一个类目的名称和链接

到这里基本可以知道,当当网的反爬确实不严格,我甚至还没有设置Headers的信息,竟然也可以爬取到想要的数据。但最后在完整的代码中,还是把headers加上了,保险起见吧。

既然这样,其他的链接也可以通过这样的方式来获取,于是比较了一下多个类目的xpath,很容易发现规律。获取所有的类目链接如下:

爬回来的部分的链接

接下来就是分别爬取每个分类下的图书信息,以“小说”为例,其实翻页特别简单,给几个比较如下:

翻页也非常简单,只不过有一点点坑的是,爬回来的链接在代码中,需要对其翻页,就需要把链接构造出来。对返回来的链接进行分析,发现仅仅是中间有四个数字不一样。于是我把这几个数据取出来,在连接中传进去,这样可以构造通用的链接。

对于翻页的数量,粗略地看了一下各个类目的最大页数,最多的是25页,当然也有少于25页的。

于是构造出每个类目下都有25个页面的链接:

构造的翻页链接-小说

构造的翻页链接-中小学教辅

接下来就是去抓取不同页面的信息,没有异步加载,所以直接用xpath定位就OK。当然中间有一些小地方需要注意的是,每本书所包含的信息是不一样的,所以用xpath去获取的时候不一定能获取到,就会出错。

完整的代码如下:

爬取的数据如下:

爬取数据截图

爬取数据截图

总共10000多行数据,对应不同领域的10000多本高评分的书籍,当然会有一些重复计算,比如小说和文学,就有不少书是同时在这两个类目的。不过不管怎么说,都拿到了数据。

当当网本身没有什么反爬机制,所以爬取也比较顺利。唯一的小麻烦就是抓回来的链接继续翻页和其中一些书籍中部分信息缺失的处理。当然,这些对于稍微有点经验的同学来说都不是什么事。

这次写爬虫,确实也是一次比较系统地尝试,之前也没爬过这么多的数据。自知技术来不够拿到优秀作业和奖励,但是非常高兴能从中获得提升,大神们见笑了。

本文来自企鹅号 - DataCastle数据城堡媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jouypub

Redis百亿级Key存储方案

该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关...

26360
来自专栏星流全栈

什么是「设计模式」?

12530
来自专栏数据派THU

独家 | Python数据分析入门指南

作者:Zack Jost 翻译:梁傅淇 校对:丁楠雅 本文长度为1500字,建议阅读3分钟 Zack Jost是美国第一资本投资国际集团的首席数据科学家,这是他...

22460
来自专栏宏伦工作室

200行Python代码实现2048

30140
来自专栏恰童鞋骚年

自己动手写游戏:飞机大战

  要说微信中最火爆的小游戏是哪款,可能既不是精心打造的3D大作,也不是《植物大战僵尸2》,而是微信5.0刚开启时的《飞机大战》。

50510
来自专栏思考的代码世界

Python网络数据采集之处理自然语言|第07天

在之前我们了解了如何把文本内容分解成 n-gram 模型,或者说是n个单词长度的词组。从最基本的功能上说,这个集合可以用来确定这段文字中最常用的单词和短语。另外...

37970
来自专栏PPV课数据科学社区

【每日一课】R语言入门教程-1.1 认识R

课程名称:R语言入门教程 第一章:认识R 1.1 认识R 【课程目的】 在大数据时代里,数据分析愈发重要,R语言适合做数据分析,R语言已成为许多数据分析...

36850
来自专栏游戏开发那些事

【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画

本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。

33520
来自专栏数据结构与算法

博弈论入门之nim游戏

nim游戏 nim游戏 有两个顶尖聪明的人在玩游戏,游戏规则是这样的: 有n堆石子,两个人可以从任意一堆石子中拿任意多个石子(不能不拿),没法拿的...

1.2K90
来自专栏Coding迪斯尼

VUE+Webpack游戏设计:增加游戏战略性平衡和实现资源预加载

12630

扫码关注云+社区

领取腾讯云代金券