python 数据分析 书籍推荐 知乎_Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书!...

原标题:Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书!

作者 | Yura

责编 | 胡巍巍

高尔基这话有没有道理我不知道,

咱也不敢问,

主要是现在也问不了。

那对我来说,读书有什么意义呢?

应该也是阶梯。

但是这影响是消极还是积极,

投入的时间和得到的回报到底成不成正比?

每本都不一样,

这很大情况与书的质量有关。

那么问题就来了,

我们到底该读什么书呢?

换言之,

若想阶梯又稳又长,

需要什么样的砖呢?

我知道豆瓣有评分TOP100的书籍榜单,

但是看着这一长串的列表,

我觉得不够有人情味。

我平时书荒的时候喜欢逛知乎,

那些带有“小红书”式夸张描述,

“必读,不可错过”“跪了”“强推“,

往往让我有一种马上买它!

啊,不是,

下载它的冲动!

上个月我买了个电子书下载的会员,

每天可以将书直接推送Kindle,

非常方便!

但是,会员是要钱的,

而且,是有时间限制的……

一眨眼,还有3天就到期了。

想想自己上个月顶多下载了3本书

现在还有3天就过期了

相当于白白浪费了

20本*(30-3天)-3本=537本书的下载机会。

还剩下3天,我一定要利用起来!

每天下载60本(哪年哪月能看完我们暂时不讨论了)。

但是知乎一条一条翻答案未免太麻烦了8!

而且好几条都是推荐差不多内容的,

不如爬取相关问题的所有答案,

做个汇总好啦!

数据获取

虽说知乎有个“阅读”的话题,但是我看了一下里面的问题不全是推荐书的,若是都爬取下来可能80%的数据都是与书籍推荐无关的。

所以我直接知乎搜索“书”,选取了回答热度较高的6个问题:

还是利用Python进行爬虫,

进入页面,展开答案:

点击“检查”网页,不断往下拉,

我们可以在XHR找到明显带有“answer”字样的链接:

多看几个链接就能找到规律啦,

(offset:0,5,15,20……)

挑自己感兴趣的字段就能“咻咻咻”爬下来了,

其他5个问题如法炮制,得到以下:

总共获取9674个回答,基本字段如下:

数据清洗

以前总觉得爬数据最难,

只要爬下来了,一切好说!

想怎么处理怎么处理,想怎么分析怎么分析。

但是这次,

爬虫的主要目的是列出一个高频出现的书籍清单,

大家的答案有言简意赅的

(我暂且不批评这些同学会的不带书名号):

也有这样,推荐语(废话)一大堆的:

你瞧瞧,回答字数最多的可有3万多字呢!

研究爬虫大概花了我一个小时,

但是怎么分析这些答案让我头痛了三个晚上!

先看一下主要的问题:

很多答案没有带书名号,因此不能简单地用正则表达式;

知友们回答的时候会出现书名打错(“一句话顶一万句”),还有书名简写或表达方式不同的情况(比如,关于哈利波特系列书籍的说法就有11种……);

最重要的是,我还不具有“看到一个词或一句话就分辨出哪些是书名哪些不是”的能力。我自己都不知道,我怎么让Python判断提取呢……

我也曾想过干脆只用《》来正则匹配内容

结果发现:

44.96%的用户回答问题的时候非常不规范,

他们在回答中没有有使用书名号!

直接这样分析的话就相当于丢失了将近一半的数据!

💡除非……除非我有一个图书库,

里面有所有书的书名,

这样我只要遍历每个答案,

如果Ta提到了这本书,

就把这个书名提取出来,

最后再统计分析就好啦!

然而,那句话怎么说来着,

想象很丰满,现实很骨感。

我并没有这样的图书库。

利用现有的数据,

我只能勉强以另外55.04%个答案中出现的书名,

进行简单处理,

得到一个简陋的书名列表……

然后再对每个答案进行遍历……

个中辛酸就不提了,提了也没用。

因为并不是完美的解决之道,

只能勉强满足我本次爬虫的目的罢了,

不过就我走过的一些坑,我还是列一下。

虽然前方有很多坑

但是大家能少进一个就少进一个吧:

数据分析

在得到最终TOP书单之前,

我们按照惯例看看这些答案的基本情况。

知乎后台性别显示的是0、1和-1,

通过研究具体两三个用户的资料,

我发现0表示女生,1表示男生,-1表示未知。

看样子这6个答案下面男生的比例略高于女生。

男生和女生回答问题的长度很接近,

说明大家都蛮勤奋的,

从互动角度来看,

男生答案人均点赞数略高于女生,

人均评论数却高出女生55%,

可能他们的答案比较具有争议性。

不过读书这种事嘛,

本来就是男女老少皆宜的,

因此在这种话题下区别性应该不大。

和正常(现代)人的作息很接近,

大部分答案是在白天的时候提交的,

其中有11%的用户在凌晨0到4点之间回答,

我觉得这部分人睡前肯定没有看书。

从回答时间和点赞数的散点图来看,

一些高赞答案都是出现在早上8点到晚上8点之间

这段时间大家精神充沛,

比较容易写出高质量答案,

养生Girl再次呼吁,大家一定要早睡呀!

有人问睡不着怎么办?

我上一段不是说了嘛(自行体会)。

前面也提到过,

答案字数最少的回答,

只有一个字:飘。

长度最长的有32210个字

是我毕业论文长度的1.5倍。

整体统计了一下,

84%的答案长度在1000字以内,

很符合大家碎片化阅读的习惯。

然而,

另外的16%用户却获得了这些答案下

93%的点赞数和72%的评论数。

瞧,瞧瞧(敲黑板),

多么形象的二八法则实例,

快做笔记同学们!

后来看看,

我得到的这三天需要下载的书单

(按照知友提到的频次排序):

98本里面我看过30本,

那么我可以从剩下的68中去掉8本

我绝对不想看的。

然后每天下载20本。

有人问为什么是TOP98,不是100?

因为我觉得这样看起来比较少,

会更有动力“yes”所有书。

作者:Yura,计算机科学与技术专业大四在读,因在澳洲交换学习接触了大数据,甚感兴趣。遂开公众号“Yura不说数据说”督促自己学习数据分析!欢迎大家关注我的个人公众号,一起(监督我)学习。

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式作业 Elastic-Job 快速上手指南

转载自 分布式作业 Elastic-Job 快速上手指南Elastic-Job支持 JAVA API 和 Spring 配置两种方式配置任务,这里我们使用 JAVA API 的形式来创建一个简单的任务入门,现在都是 Spring Boot 时代了,所以不建议使用 Spring 配置文件的形式。 Elast…

7-指令系统

README】 1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 机器指令: CPU能够识别并且执行的操作命令;有可以理解为不同cpu,在生产时预设了一组…

WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例

最近出于工作需要,了解了一下微服务架构(Microservice Architecture,MSA)。我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架构的应用程序案例&a…

常用的数据交换格式有哪些_高程数据格式介绍

高程数据格式介绍1 概述目前业内常用的地形数据格式有img,tif,grp及dem,其中dem在地形表达中能力最强,效果最好,本文围绕dem的数据格式进行介绍。2 DEM简介数字高程模型(Digital Elevation Model),简称DEM,是通过有限的地形高程数…

switch case 支持的 6 种数据类型

转载自 switch case 支持的 6 种数据类型那么今天就讲一下 Java 中的 switch case 语句吧,有忘记的同学正好可以温习一下。 Java 中 switch case 语句用来判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。 语法格式如下: switc…

1-操作系统启动前的工作

【README】 1.本文总结自B站《操作系统(哈工大李治军老师)》的视频讲解,非常棒,墙裂推荐; 【1】计算机上电 1) 问题: 这神秘的黑色背后发生了什么 ?计算机是怎么工作的&#x…

傅里叶变换公式_理解1维傅里叶变换

上个学期,学习了信号与系统。虽然知道了傅里叶变换的作用以及如何使用。但是对于它的本质,也就是FT是如何探测到频率的尚有疑惑。而恰好在知乎上发现了一些很好的回答。故将这些回答整理在这。感性理解1维FT知友Heinrich写的傅里叶分析之掐死教程&#x…

ASP.NET Core的配置(3): 将配置绑定为对象

出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的配置绑定为一个对象,我们将后者称为Options对象。我们在《ASP.NET Core的配置(1)&…

11 个简练的 Java 性能调优技巧

转载自 11 个简练的 Java 性能调优技巧想要让你的项目一直高性能运作吗?以下有一些技巧你可以拿去消除缓存瓶颈,还有一些其他的性能调优建议。 大多数开发者认为性能优化是一个复杂的话题,它需要大量的工作经验和相关知识理论。好吧&#xff…

pre1-flink理论-批处理与流处理+简单示例

【README】 1.本文包含了 批处理与流处理的代码示例; 批处理:把数据 攒在一起(或攒一段时间或攒一定内存大小),然后再处理,这叫批处理;流处理:数据每来一个就处理一个;…

python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式

本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式。分享给大家供大家参考,具体如下:表单介绍表单是HTML页面中负责数据采集功能的部件。由表单标签,表单域和表单按钮组成。通过表单,将用户输入的数据提交给服务器&am…

高级 | Java中获取类名的3种方法

转载自 高级 | Java中获取类名的3种方法获取类名的方法 Java 中获取类名的方式主要有以下三种。 getName() 返回的是虚拟机里面的class的类名表现形式。 getCanonicalName() 返回的是更容易理解的类名表示。 getSimpleName() 返回的是类的简称。 都有什么区别? 通过…

Asp.net 面向接口可扩展框架之核心容器

新框架的容器部分终于调通了!容器实在太重要了,所以有用了一个名词叫“核心容器”。 容器为什么那么重要呢?这个有必要好好说道说道。 1、首先我们从框架名称面向接口编程说起,什么是面向接口编程?(这个度娘回答一下) 解读一下:类是个体的定义…

pre2-flink单机部署与job提交

【README】 本文记录了flink单机部署,以及flink job2种提交方式; 【1】flink 单机部署 step1)下载flink 包; Apache Flink: Stateful Computations over Data Streamshttps://flink.apache.org/ step2)解压 tar -z…

到底什么是跨域?附解决方案

转载自 到底什么是跨域?附解决方案什么是跨域 要了解跨域,先要说说同源策略。 同源策略是由 Netscape 公司提出的一个著名的安全策略,所有支持 JavaScript 的浏览器都会使用这个策略。 所谓同源是指,域名,协议&#xf…

vue 字典_【开源】基于Vue的前端组件库HeyUI

说道vue组件库,目前主流的基本就是iview和element。今天又发现一个很不错的。HeyUI。组件也很丰富,入门比较简单。反正开源框架我们有不嫌多,多多益善啊。感兴趣的可以看看。关于HeyUIHeyUI 是一套基于 Vue2.0 的开源 UI 组件库,主…

(译)java8-流定义

【README】 本文翻译自 Stream In Java - GeeksforGeeks , 主要介绍了java8流; 【1】流 1)流定义:流是支持各种方法的对象序列(一系列对象),这些方法可以流水线化调用以产生期望结果&#xff…

基于CefSharp构建基于Chromium的应用程序

chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由 度,2013年google决定自己开发webcore的分支,叫做Blink引擎,而后…

最新后端架构师技术图谱

转载自 最新后端架构师技术图谱深呼吸,慢慢学,技术长路漫漫… 数据结构二叉树完全二叉树平衡二叉树二叉查找树(BST)红黑树B-,B,B*树LSM 树队列集合链表、数组字典、关联数组栈树BitSet常用算法KPM 算法选择…

ansible脚本-Playbook(一)

Playbook组成部分: task 任务:包含目标主机上执行的操作,使用模块定义这些操作,每个任务都是一个模块的调用Variables变量:存储和传递数据,变量可以自定义,可以在playbook当中定义为全局变量&a…