这是菜鸟学Python的第97篇原创文章
阅读本文大概需要3分钟
前面讲了好几篇SQL的文章,熟悉我的文章的小伙伴都知道,一般写一个系列,写完一个小阶段,我都会实战写一个例子综合运用一下。正好最近一些出版社跟我联系关于Python书的事情,Python的书其实我看过不少,于是我非常好奇,想知道出版社哪家最强。于是干脆想探索一下市面上所有的Python书,然后分析一下出个报告,说干就干吧~~
1
思路篇
1).我大概花了一个晚上的时间,几乎一动不动的码了3个小时(热的T恤都粘在背上了),爬取了某知名的网站上所有的Python的书, 总共大概有1300多本,因为有一些是重复的,剔除重复的大概还有1200多本
2).接着把这些书的数据,进行清洗,数据的清洗其实是最繁琐的,也是最耗时的步骤,算是整个数据分析里面的重头戏。我算了一下我的数据清洗这一步,花了很大的时间,这一步会遇到很多七七八八的烦心事~~
3).然后按照一定的规则写入到CSV文件,当然也可以写成json文件的格式,因为我想做一个SQL的实战运用,所以我暂时写成CSV文件,方便存入SQL数据库
4).最后数据的分析,我们从SQL数据库中,查询各种各样的组合条件,具体我想知道信息下面慢慢道来.
2
想知道的秘密
1200多本书,我们想探索哪些秘密呢:
哪家出版社出版的Python书最多
哪本Python书的评分最高,都分布在哪些出版社
哪本Python数的阅读数最高
评分高的Python书,是不是阅读数一定很高,有多少人评分的,这两个数据有没有什么秘密隐藏在里面
Python书的页数和价格,还有评分,之间有没有什么关系,市面上卖的好的书,评分9分以上的书,都有哪些特征
在这1200本Python书中,那一年出版发行的python书最多
3
技术篇
1).技术上感觉难度应该不大,我们首先爬取某网站上的所有Python的书的所有的链接
2).然后分析每一本书的链接,我们希望解析的信息如下:
我们要提取作者/出版社/译者/出版年/页数/定价/ISBN/评分/评价人数
代码爬出的数据,经过处理,格式如下:
author : DavidM.Beazley/BrianK.Jones
book : Python Cookbook 中文版,第3版
isdn : 9787115379597
page : 684
price : 108.0
pub_company : 人民邮电出版社
pub_date : 2015-5-1
rating_people : 51
translator : 陈舸
url : https://book.douban.com/subject/26381341/
vote_num : 8.9
3).爬虫
爬虫可以选择的技术有很多种,你可以自己写多线程去爬,可以用scrapy去爬,或者自己写一个小的框架去爬,这个只是一个途径而已
爬虫的难点,主要是在分析目标的网站的格式,我写完这个项目的时候,发现最大的坑在于,Python的书的html格式会不一样:
作者html格式一
作者html格式二
-
大家有没有发现什么不同,要提取作者的信息不难,难在有的书它的作者是嵌套在<span>下面的<a>里面,而有的书的作者是直接跟在<span>后面的Navstring里面
-
那么一套爬虫代码需要在解析的时候,兼容两种html格式的爬取,这个会是一个难点
4).写入CSV文件,因为量不是很大,只有1000多条数据,所以开销我们不用在乎,只需要当心保存数据的格式都是对的。特别是当心缺省数据,比如有的书是用译者,有的没有;如果没有缺省值,这样写入CSV的时候,数据容易遗漏,跟CSV的头文件对齐会有问题.
5).数据库的查询
我们用SQL查询比较简单,我们可以把所有的数据做成一个表格,也可以把重要的信息,比如 书名,出版社,评分,ISDN单独弄成一个表格,用ISDN作为主的id key.
4
一些注意事项
除了上面提到的作者的html格式问题之外,还有几个地方要注意
1).字符编码的问题
这些书名,有的是中文,有的是英文,,也就是说有的ASCII,有的uncode,在写入CSV文件的时候需要考虑编码的转换,即使你考虑到了转换,还有一个问题,就是有一些数据是int,而int是无法encode的,怎么办,比如把0变成'0'这样的类似问题
2).数据格式不一致
-
比如有的书,有译者,有的没有,这样的话你就要考虑缺省值
-
比如有的书,有评价人数,有的显示'评价人数不足',需要手动转换
-
比如书的价格:有的是USD 用美金计算,有的是人民币计算,而且写的格式也不一样,需要统计的转换,这样最后分析那本书价格最高比较好获取
-
日期问题,有一些是纯数字2008-11-1,有一些是数字和汉字结合的比如2010-7月,还有一些只有年份
-
评价人数,不是只是简单的数字,而是数字和中文字符夹在一起,比如"204人评价"
数据清洗是数据分析里面非常重要的一个环节,而且是最耗精力和时间的,占60%的比重,数据不一致也是家常便饭,我们需要仔细清洗哦
整个项目我基本已经完成了70%,还有一小块需要完善优化一下,先睹为快吧
...
结论:
好,今天的全网分析Python书,思路准备篇,算是开了个头,下周会详细讲一些技术细节,以及分析的结果用SQL的查询,都一一展现给大家,这个里面的数据挖掘还是很有意思的,有兴趣的小伙伴,也可以自己动手一下哦.若有什么问题,也欢迎留言讨论一下.
欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python吧
Python数据库起航篇|零基础起步
学会最简单的数据库|看完这7招就够了
3分钟带你了解SQL高级操作
你离学会操作SQL数据库|还剩最后2招
菜鸟学Python入门教程大盘点|7个多月的心血总结
同学,学Python真的不能这样学
全网爬取6500多只基金|看看哪家基金最强
用Python破解微软面试题|24点游戏
2道极好的Python算法题|带你透彻理解装饰器的妙用
一道Google的算法题 |Python巧妙破解
长按二维码,关注【菜鸟学python】
来源 | 菜鸟学Python
作者 | xinxin
本文章为菜鸟学Python独家原创稿件,未经授权不得转载
本篇文章来源于: 菜鸟学Python
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 数据分析入门系列教程-常用图表05/26
- ♥ 使用 Python 进行函数式编程11/14
- ♥ python归并排序的实现原理12/31
- ♥ python reversed 的反向迭代01/05
- ♥ 如何在python中删除矩阵的最后一行?10/06
- ♥ 如何在python中将系列转换为列表?08/25
内容反馈