Python爬虫学习:简书签约作者知多少?
这个周末用Python爬虫把简书上的签约作者信息、文章爬取了一遍,想对简书签约作者有一个整体了解,并进行数据分析,他们写作的频度是怎样的,写作的类型有哪些?他们最值得学习的地方有哪些?
下一个会是你吗?一、爬取哪些信息?
爬取的信息包括爬出所有签约作者主页(latest_articles),签约作者发表的文章篇数、字数、粉丝数,收获的喜欢;他们在简书上发表第一篇文章的时间,在简书上写作的时间天数。
“首页热门”,“七日热门”,“三十日热门”文章中签约作者文章的占比数。
二 、爬虫从哪里开始?
简书上没有专门页面推荐展示“简书签约作者”,必须设置一个入口去爬取这些信息。我能找到一个专题是《简书签约作者新春大拜年》,这是2016年春节收录了10位简书签约作者的新春大拜年文章,显然现在不止这10位。
一开始设想的方案,是从“三十日热门”中的一篇文章开始,抓取这篇文章的“打赏支持”、“喜欢”和“评论”的用户,再顺着作者粉丝(或关注)往下爬取。但看过几篇文章,这种方法马上被否掉,因为打赏、喜欢和评论以及粉丝99%的都是一般特征用户(即读者,很少发表文章),相当于从简书大量用户中捞出“签约作者”,效率太低,如果要做简书一般用户的分析,这种方案可以考虑。
我把目标转向了“首页热门”,“七日热门”,“三十日热门”这个几栏目。既然简书没有专门的推荐简书签约作者,那他们必须靠文章来进行展现。如果把这几个栏目中文章的签约作者都抓取下来,应该能找到95%以上的简书签约作者。
这几个栏目首屏都是显示20条数据,页面上没有分页,只有一个“点击查看更多”,在代码找到分页显示的url,并有page参数。但在url地址栏试了一下,发现只修改page并不能获得正确的页面,而且也不知道总页数。
换一个思路,通过递归方法抓取页面的“点击查看更多”的url,直到页面上没有“点击查看更多为止”,这样首页热点是99条数据。拿到每篇文章作者的url。
递归调用获取“更多”url获取到这个栏目文章作者的主页链接,再到用户主页爬取信息,判断是不是简书签约作者,如果是,抓取用户相关信息,发表的文章相关信息。
在作者页面通过看源代码,找到文章分页url,定位于最后一页最后一篇文章,抓取到作得发表第一篇文章的时间,第一篇文章的阅读数的评论数,计算出在简书上写作的天数。
这个分页url是有效的!三、如何爬取到完整的数据?
这次我把爬取的数据写成CSV文件,方便查看、做数据分析。把“首页热门”(top/daily),“七日热门”(top/weekly),“三十日热门”(top/monthly)数据放在一起,去重后,找到的简书签约作者记录是32条。
5/15《首页热门》上简书签约作者的数据这种方式爬取的数据量不大,找到的信息比手动搜索专题收录的数据多了一倍多。我随手翻阅了一下“成为简书签约作者”的文章,一篇文章中写道,她是第46位简书签约作者。我意识到爬取的数据量还不全。这时,第一栏数据,关注数,引起我的注意,原来以为是分析中最没有用的一个数据,我看了一下两位作者,发现,简书签约作者之间互关的比较多,从这“关注”数据中应该可以再抓取到一些数据。
就马上增加一个方法,把签约作者的关注的用户再爬取一次找出签约作者,再经过数据去重,最终得到63位简书签约作者的信息。
如果猜测一下的话,“热门”中抓取到的数据应该是“简书签约作者”中的活跃用户或新晋作者,互关数据中抓取的数据应该是加入时间靠前的,写作方向比较偏一点的。更多数据分析,另文详述,更有一些好玩有趣数据,以及怎样才能成为简书签约作者。
PyCharm 代码总结
- 设计一个爬虫的入口很重要,关乎到数据抓取的效率。
- 对数据的查看过程中发现有效数据的隐藏点,再进行抓取。
- 这次仍然使用request,xpath,代码更熟练了一些。没有使用scrapy,主要是才刚刚开始,对于多数据的爬取处理不太熟悉。