京东链接:https://item.jd.com/12575102.html
经过近一年的辛苦创作、编辑、等待,本书终于出版了。这种感觉有点像是十月怀胎,但没有生育时候的痛苦,只有最后得到的欣喜。现在回忆起去年接到写书的邀请,然后到纠结,再到刚开始痛苦的写作,以及最后成稿后的释然,一切都觉得是一场人生的经历。我倒是认为写书的目的不是为了赚钱,写一本书给自己,总结自己的过往,将经验传播给他人,就可以了。
故事——还得从2017年说起
2017年1月左右,摩拜单车终于进入到成都。不像重庆那样的上山下坡,成都平原地势较平,成都原本就有非常多骑自行车的人,街头巷尾都有自行车的踪影。作为短途的必要交通工具,摩拜单车的进入算是给出行带来了非常大的方便。
有一天在查看摩拜单车的APP的时候,突发奇想是否可以将这些车的位置数据拿到,然后尝试分析一下运营状况,看看成都到底有多少车。打开电脑,轻车熟路的进行API分析,搞明白了API的接口,然后就写了一个简单的爬虫,获取了一个月左右的数据并进行了分析。然后在简书上发了几篇文章,并将源代码放在了https://github.com/derekhe/mobike-crawler这个repo中。
出乎意料的是,这些分析居然得到了非常大的流量,两三天时间就到了1万多的阅读量,甚至这个数据分析还“成功”的引起了对方的注意:被问到你怎么得到数据?
2018年
2018年,顺着这个思路,后来我又继续分析并爬取了共享汽车、自由职业者网站,并继续坚持将2016年6月开始做的机票的数据爬虫做得更快更稳定。
2017年末,爱飞狗旅行小程序上线,将我收集到的机票的数据公开,并集成了一个预测系统。知晓小程序对此特意写了一篇文章进行报道。随后,在2018年下半年ThougtWorks对外的YottaBytes分享中,我将爱飞狗的整个产品的规划、开发以及背后的技术实践都分享出来,并写成文章。
写书?
2018年3月底,电子工业出版社的安娜编辑联系我,看我能不能约一本书稿。当时我还没放在心上,想想写个书算是一个大工程吧,费时费力的,当时就想想要不还是算了?后来和编辑的更多沟通中发现,爬虫方面的书最近还比较热,也能热一段时间,我做的这些工作也恰好和爬虫非常有关。
我随后看了一些目前的爬虫相关的书籍, 发现很多爬虫的书籍都写得很初级,讲讲Python的语法、讲讲几个库的用法,弄两个例子就完了,甚至有些书居然用了76页讲各种东西的安装!!初级的爬虫往往很简单,爬几个网站即可,但更复杂的如何去拿到app的数据,如何破解一些sign的思路,却全然没有。或许是太复杂了吧。即便有些数据拿到手了,怎么分析,怎么可视化,也很少有讲解。
如果我要写的话,我一定不会写这样的书,我不会写初级的书。我要写的话,一定是从一个想法开始,到如何实现这个想法,到如何解决各种困难。案例的话,一定是end to end的,将数据达到实用的阶段。
还好之前做过的各种数据分析案例,都是有一定的业务背景的,有一些数据提供给了一些爱好者进行了更深入的分析,有一些数据甚至帮助一些公司进行一些新业务的拓展尝试。我和编辑沟通了这些想法,那就开始动手吧!(其实内心是有点纠结的,因为想到要写很长的时间,非常的难受)
那就开始吧
这是最原始的选题单,可以看到其实当时想写的例子其实比现在书中呈现的更多。但后来由于目标网站改动太大,以及有些网站的例子不太合适,所以进行了删减。
最后,只有半年的时间啊……
万事开头难,先写个提纲吧:
开始
工欲善其事必先利其器,2009年写过研究生的论文,倒是对Word玩的很溜。但如今都2018年了哟,好歹用点Markdown对吧!
好吧,就用Markdown。但是用Markdown的话,我需要把每个章节分开么?后来尝试了一下发现,单一Markdown文件就非常利于管理,不用有洁癖一样把东西拆来拆去:
- 方便预览整书情况
- 方便章节之间相互引用
- 避免调整章节时候的麻烦事
然后,在Visual Studio中安装了Markdown Preview Enhanced插件,这个工具很好:
- 自动预览
- 自动生成目录
- 自动内嵌图片、内嵌代码
- 能够导出成多种格式(Word格式、PDF格式等)
最后,整个项目当然会用git进行管理,这是最基本的啦。
其中我觉得需要拿出来讲的是,Markdown中可以直接引用代码。这意味着我一边写书一边写的代码,可以无缝的集成到文章中,这样我更改了代码以后,书中的代码也更新了,避免了不同步的问题。
一年
现在回顾一下整个出书的历程。
我这个人是喜欢一鼓作气做完一件事情。为了保证及时交付,每天都分配了至少两个小时的时间,再加上之前已经有一些素材的积累,所以整个书的书写都相对比较快。基本上在4个月时间内集中写完了书籍。初稿完成后,我的事情就比较少了,主要是一些校对的工作。
- 4月底:建立Repo
- 5月初:书写第一章
- 6月初:完成单车部分书写
- 6月底:完成共享汽车部分书写
- 7月底:完成Freelancer部分书写
- 8月初:增加爱飞狗产品
- 9月底:完成所有书写,并转换成docx供编辑修改
- 10月初——12月底 一排
- 12月底到1月初: 二排,拿到书号
- 2月底:终审
- 3月中:封面、查重、定价
- 3月底:样书到
经验
- 持续和编辑联系,写完一章就给编辑大致看看得到反馈
这一点避免了很多走弯路。第一次写书,对写书需要做的事情了解的比较少,加之平时在敏捷项目中都强调快速反馈,在写书过程中也是,能够及时避免一些坑。 - 一鼓作气,坚持每天花些时间写,避免拖拉
- 长期写博客,积累素材
坑
在写书的过程中也有一些不可避免的“坑”。一来是写书不像是写博客那么随意,对于语言以及内容的提供都要有一个监管在里面。运气不好的是初稿交了以后,编辑告诉我2018年国家对地图相关的图片管理很严。我了解到相关的书籍都必须要进行审核,虽然说是免费,但是为了避免审核的时间消耗和一些潜在的风险,我们对书中的一些地图相关的图片、内容进行了一些修改和删减。
爬虫这种技术有一定的法律风险,再三考虑之下对书中也有提到一些特定APP名字的地方,我们将名字进行了打码,并强调了这些思路以及代码都仅供参考。
初稿的反馈说书写的很直白,全是干货,审核后说是要语言柔和一些。由于这个书的架构和其他类似书籍先将一大堆基础知识不一样,出版社的领导提议说将书的结构进行调整,变成介绍工具在前,案例在后。但这就是我想尽力避免的,不想让读者的钱花到了原本网上可以很快查到的地方,所以拒绝了。
由于互联网时代变化很快,网站和APP都在改版,所以爬虫相关的代码,目前有些已经无法使用了。这是预料之中的事情,但书中所传递的方法,是通用的。
总结
不管如何,第一本书也算是出来了,放在书架上也是对我的极大地鼓舞。写书不容易,一旦开始就要一鼓作气。平时的积累非常重要,所以多多写博客吧。