前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: 数据森麟

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

这两天偶然上网的时候,被知乎上一个名为“玉皇大帝住在平流层还是对流层”的问题吸引,本以为只是小打小闹,殊不知这个问题却在知乎上引发了强烈共鸣,浏览次数500W+,7000+关注:

数据来源

知乎非常“贴心”地专门有一个问题可以满足我们的需求,出人意料的是这个问题居然有243个回答,并且陶飞同学获得了3W+的赞同

我们从中爬取了所有回答中出现的问题链接,共用400多个问题,其中陶飞就提供了200+,在此向陶飞同学表示感谢,帮助我们构建了“沙雕数据库”,这部分代码如下:

 import re
import selenium
from selenium import webdriver
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

driver = webdriver.Chrome()
driver.maximize_window()

url = 'https://www.zhihu.com/question/37453271'
js='window.open("'+url+'")'
driver.execute_script(js)
driver.close()
driver.switch_to_window(driver.window_handles[0])
for i in range(100):
js="var q=document.documentElement.scrollTop=10000000"
driver.execute_script(js)

all_html = [k.get_property('innerHTML') for k in driver.find_elements_by_class_name('AnswerItem')]
all_text = ''.join(all_html)

#all_text = all_text.replace('\u002F','/')
all_text = all_text.replace('questions','question')
pat = 'question/\d+'
questions = list(set([k for k in re.findall(pat,all_text)]))

获得到了问题的对应的编号后,就可以去各自的页面获取各个问题对应的的标题、浏览数等信息,如下图所示:

这部分代码如下:

 header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win32; x32; rv:54.0) Gecko/20100101 Firefox/54.0',
'Connection': 'keep-alive'}
cookies ='v=3; iuuid=1A6E888B4A4B29B16FBA1299108DBE9CDCB327A9713C232B36E4DB4FF222CF03; webp=true; ci=1%2C%E5%8C%97%E4%BA%AC; __guid=26581345.3954606544145667000.1530879049181.8303; _lxsdk_cuid=1646f808301c8-0a4e19f5421593-5d4e211f-100200-1646f808302c8; _lxsdk=1A6E888B4A4B29B16FBA1299108DBE9CDCB327A9713C232B36E4DB4FF222CF03; monitor_count=1; _lxsdk_s=16472ee89ec-de2-f91-ed0%7C%7C5; __mta=189118996.1530879050545.1530936763555.1530937843742.18'
cookie = {}
for line in cookies.split(';'):
name, value = cookies.strip().split('=', 1)
cookie[name] = value

questions_df = pd.DataFrame(columns = ['title','visit','follower','answer','is_open'])

for i in range(len(questions)):
try:
url = 'https://www.zhihu.com/'+questions[i]
html = requests.get(url,cookies=cookie, headers=header).content
bsObj = BeautifulSoup(html.decode('utf-8'),"html.parser")
text = str(bsObj)
title = bsObj.find('h1',attrs={'class':'QuestionHeader-title'}).text
visit = int(re.findall('"visitCount":\d+',text)[0].replace('"visitCount":',''))
follower = int(re.findall('"followerCount":\d+',text)[0].replace('"followerCount":',''))
answer = int(re.findall('"answerCount":\d+',text)[0].replace('"answerCount":',''))
is_open = int(len(re.findall('问题已关闭',text))==0)
questions_df = questions_df.append({'title':title,'visit':visit,
'follower':follower,'answer':answer,
'is_open':is_open},ignore_index=True)
time.sleep(2)
print(i)
except:
print('错误'+str(i))

数据分析

在分享出最终的“沙雕排行榜”前,我们首先严肃认真(lixinggongshi)的进行一波分析,主要看一下问题中的关键词,首先是所有词云的词云:

看来这些问题大多是源自于大家对于人生的探索,否则“为什么”,“如果”,“怎么办”也不会出现那么多,出人意料的是“体验”这个知乎专属tag居然并不多,可能是出于对知乎的尊重,和“体验”相关的问题都不会问得那么“沙雕”。

下面把这些助词去掉,再来看下结果:

这个图看来,读者关注的问题还是很极端,一方面在关注男女朋友“你冷酷、你无情、你无理取闹”这种问题,另一方面却在关注宇宙、地球这种关乎全人类的问题,很符合知乎“人均985,各个过百万”的人设。

这两个图实际上都是基于一个表情,不知道有没有看出来:

好吧,其实看不出来才是正常,能看出来的可能现在去知乎提个问题,下期就会上榜,最后把部分问题做出词云:

不知道大家能不能看清,说实话我自己是看不清的,也没准备让大家看清,目的就是引出下面真正的排行榜

沙雕问题排行榜

通过综合问题观看数,关注数,回答数,关注占比,回答占比,综合得到分数的流量指数和新奇指数,最终获得一个整体的分数,如下图所示:

听起来是不是很复杂,实际上最终还是通过90%10%的数据+10%90%的主观来进行了排名,为大家精选了15个最为“沙雕”的问题,

最新文章

  1. LeetCode All in One 题目讲解汇总(持续更新中...)
  2. C#:复杂条件判断类型(练习)
  3. Amazon验证码机器算法识别
  4. IOS开发之网络编程开源类 Reachability应用
  5. XSS攻击及防御(转)
  6. WIFI环境下Android手机和电脑通信
  7. 跨域解决方案CORS使用方法
  8. 阿里云ECS试用
  9. pygame学习资料
  10. MYSQL group_concat() 函数
  11. 【原】Spark 编程指南
  12. [hihoCoder]无间道之并查集
  13. 终于懂得Perl句柄是什么意思了
  14. 斐讯K1 K2 开启Telnet
  15. cenos下安装MySQL最新版(5.7.18)记录。附卸载老版本过程
  16. 图解GIT,ZT
  17. LeetCode - Minimum Area Rectangle
  18. Python_01 执行方式、解释器路径、编码、变量、条件语句
  19. Oracle 视图view
  20. 【转】VC中MessageBox与AfxMessageBox用法与区别

热门文章

  1. SpringBoot打包为war包,并在tomcat中运行
  2. 硬盘容量统计神器WinDirStat
  3. maven工程指定web资源包,创建jsp文件
  4. 【ASP.NET Core学习】入门
  5. 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)
  6. JS(TS)中数组常见的方法(未完待续)
  7. 【转】java的string中,关于split空串总会返回单个元素的数组
  8. XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生
  9. 实战项目-用例评审-问题总结-Dotest-董浩
  10. JUC-0-JUC简介