用Python做一个知乎沙雕问题总结

用Python做一个知乎沙雕问题总结

松鼠爱吃饼干2020-04-01 13:40

前言

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

作者: 数据森麟

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

这两天偶然上网的时候,被知乎上一个名为“玉皇大帝住在平流层还是对流层”的问题吸引,本以为只是小打小闹,殊不知这个问题却在知乎上引发了强烈共鸣,浏览次数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个最为“沙雕”的问题,

原文地址:https://www.cnblogs.com/python0921/p/12612211.html

时间: 2024-10-07 00:06:37

用Python做一个知乎沙雕问题总结的相关文章

用python做一个搜索引擎(Pylucene)

什么是搜索引擎? 搜索引擎是"对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分".如图1是搜索引擎的一般结构,信息搜集模块从网络采集信息到网络信息库之中(一般使用爬虫):然后信息整理模块对采集的信息进行分词.去停用词.赋权重等操作后建立索引表(一般是倒排索引)构成索引库:最后用户查询模块就可以识别用户的检索需求并提供检索服务啦. 图1  搜索引擎的一般结构 2.  使用python实现一个简单搜索引擎 2.1  问题分析 从图1看,一个完整的搜

用python做一个简单的pong游戏

pong游戏就是一个用挡板去控制一个小球不触底的一个小游戏,上个世纪以电视游戏的方式发行,取得巨大的成功. 看了一点书,知道pygame是python里一个强大的模块,做出这个游戏的简易模式也不难. 主要思想:1.创建游戏界面,挡板,小球以及记分牌. 2.小球碰到游戏界面四个边界会反弹,即x方向和y方向上的速度会改变为负,碰到底边生命数会减1. 3.小球与挡板碰撞y方向速度会变负,同时分数加1. 4.游戏结束会显示相关文字. 代码如下: import pygame pygame.init() s

[Java]知乎下巴第0集:让我们一起来做一个知乎爬虫吧哦耶

身边的小伙伴们很多都喜欢刷知乎,当然我也不例外, 但是手机刷太消耗流量,电脑又不太方便. 于是,就诞生了这一款小软件:铛铛铛铛!知乎下巴=.= 知乎下巴,音译就是知乎下吧 ~ 首先我们来缕一缕思绪,想想到底要做什么,列个简单的需求. 需求如下: 1.模拟访问知乎官网(http://www.zhihu.com/) 2.下载指定的页面内容,包括:今日最热,本月最热,编辑推荐 3.下载指定分类中的所有问答,比如:投资,编程,挂科 4.下载指定回答者的所有回答 5.最好有个一键点赞的变态功能(这样我就可

[Python] 用python做一个游戏辅助脚本,完整思路

一.说明 简述:本文将以4399小游戏<宠物连连看经典版2>作为测试案例,通过识别小图标,模拟鼠标点击,快速完成配对.对于有兴趣学习游戏脚本的同学有一定的帮助. 运行环境:Win10/Python3.5. 主要模块:win32gui(识别窗口.窗口置顶等操作).PIL(屏幕截图).numpy(创建矩阵).operator(比较值).pymouse(模拟鼠标点击). 注意点: 1.如果安装pymouse不成功或者运行报错,可以考虑先通过whl 安装pyHook.然后再通过pip安装pyuseri

绕过010Editor网络验证(用python做一个仿真http server真容易,就几行代码)

010Editor是一款非常强大的十六进制编辑器,尤其是它的模板功能在分析文件格式时相当好用!网上现在也有不少010Editor的破解版,如果没钱或者舍不得花钱买授权的话,去官方下载安装包再使用注册机算号是一个比较安全的选择.不过010Editor是有网络验证功能的,可以在本地架一个HTTP服务器来绕过这个验证(网上也能找到通过修改注册表绕过的方法,没有验证).使用Python的BaseHTTPServer模块就可以实现这个功能(继承BaseHTTPRequestHandler并重写do_GET

[python]做一个简单爬虫

为什么选择python,它强大的库可以让你专注在爬虫这一件事上而不是更底层的更繁杂的事 爬虫说简单很简单,说麻烦也很麻烦,完全取决于你的需求是什么以及你爬的网站所决定的,遇到的第一个简单的例子是paste.ubuntu.com 这是一个贴代码的网站,没事喜欢看看有没有什么好玩的东西,只是上面大部分都是minecraft的东西,于是写了以下代码 1 import urllib2 2 import socket 3 import re 4 def getData(url, timeOut = 10)

python做一个http接口测试框架

目录结构 project case#测试用例 suite#测试目录 logs#测试日志 papi#测试类 result#测试结果 setting.py#配置文件 1.日志类,用于测试时日志记录 pyapilog.py 1 # -*-coding:utf-8 -*- 2 # !/usr/bin/python 3 __author__ = 'dongjie' 4 __data__ = '2015-05-20' 5 6 import logging 7 import datetime 8 import

[转]用Python做一个自动生成读表代码的小脚本

写在开始(本片文章不是写给小白的,至少你应该知道一些常识!) 大家在Unity开发中,肯定会把一些数据放到配置文件中,尤其是大一点的项目,每次开发一个新功能的时候,都要重复的写那些读表代码.非常烦.来个实用小工具,大家随便看看. 1 #-*- coding: utf-8 -*- 2 #----------------------------------------------------------# 3 # 版本:python-3.5.0a3-amd64 4 # 功能:生成读表代码文件 5 #

如何利用Python做一个答疑辅助系统!百万奖金分一杯羹?

结果 嗯-用这种PMI算法得到的结果还是不太靠谱,按照整个问题来搜索AC选项差异不大,按照"电影"这个关键词应该选B--(正确答案是C)所以还是需要把搜索结果的前几条给展示出来的.获得正确答案之后朝着各个模拟器发送一个对应位置的adb shell input去点击选项即可. 欢迎大家关注我的博客:https://home.cnblogs.com/u/Python1234/ 欢迎加入千人交流答疑群:125240963 原文地址:https://www.cnblogs.com/Python