我爬取了市面上所有的Python书|想知道几件事

浏览: 1722

image.png

这是菜鸟学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).然后分析每一本书的链接,我们希望解析的信息如下:

image.png

我们要提取作者/出版社/译者/出版年/页数/定价/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格式会不一样:

image.png

    作者html格式一

image.png

  • 大家有没有发现什么不同,要提取作者的信息不难,难在有的书它的作者是嵌套在<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%,还有一小块需要完善优化一下,先睹为快吧

image.png

结论:


好,今天的全网分析Python书,思路准备篇,算是开了个头,下周会详细讲一些技术细节,以及分析的结果用SQL的查询,都一一展现给大家,这个里面的数据挖掘还是很有意思的,有兴趣的小伙伴,也可以自己动手一下哦.若有什么问题,也欢迎留言讨论一下.


欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python吧

数据库系列历史文章

        Python数据库起航篇|零基础起步

学会最简单的数据库|看完这7招就够了

3分钟带你了解SQL高级操作

你离学会操作SQL数据库|还剩最后2招

历史人气文章

菜鸟学Python入门教程大盘点|7个多月的心血总结

同学,学Python真的不能这样学

全网爬取6500多只基金|看看哪家基金最强

用Python破解微软面试题|24点游戏

2道极好的Python算法题|带你透彻理解装饰器的妙用

一道Google的算法题 |Python巧妙破解

 长按二维码,关注【菜鸟学python】


推荐 0
本文由 菜鸟学Python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册