前言

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

作者: 数据森麟

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个最为“沙雕”的问题,

我用python爬取了知乎Top沙雕问题排行榜的更多相关文章

  1. python爬取中国知网部分论文信息

    爬取指定主题的论文,并以相关度排序. #!/usr/bin/python3 # -*- coding: utf-8 -*- import requests import linecache impor ...

  2. Python爬取中国知网文献、参考文献、引证文献

    前两天老师派了个活,让下载知网上根据高级搜索得到的来源文献的参考文献及引证文献数据,网上找了一些相关博客,感觉都不太合适,因此特此记录,希望对需要的人有帮助. 切入正题,先说这次需求,高级搜索,根据中 ...

  3. Python爬虫从入门到放弃(十八)之 Scrapy爬取所有知乎用户信息(上)

    爬取的思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账号 ...

  4. Python之爬虫(二十) Scrapy爬取所有知乎用户信息(上)

    爬取的思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账号 ...

  5. Python爬取网页信息

    Python爬取网页信息的步骤 以爬取英文名字网站(https://nameberry.com/)中每个名字的评论内容,包括英文名,用户名,评论的时间和评论的内容为例. 1.确认网址 在浏览器中输入初 ...

  6. 【Python爬虫案例】用Python爬取李子柒B站视频数据

    一.视频数据结果 今天是2021.12.7号,前几天用python爬取了李子柒的油管评论并做了数据分析,可移步至: https://www.cnblogs.com/mashukui/p/1622025 ...

  7. Python 爬取所有51VOA网站的Learn a words文本及mp3音频

    Python 爬取所有51VOA网站的Learn a words文本及mp3音频 #!/usr/bin/env python # -*- coding: utf-8 -*- #Python 爬取所有5 ...

  8. python爬取网站数据

    开学前接了一个任务,内容是从网上爬取特定属性的数据.正好之前学了python,练练手. 编码问题 因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了. 问题要从文字的编码讲 ...

  9. python爬取某个网页的图片-如百度贴吧

    python爬取某个网页的图片-如百度贴吧 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用告诉我 #coding:utf-8 import urllib imp ...

随机推荐

  1. Navicat Premium连接mongodb基本使用和介绍

    Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具, 它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL,mongodb ...

  2. Web安全测试学习笔记-SQL注入-利用concat和updatexml函数

    mysql数据库中有两个函数:concat和updatexml,在sql注入时经常组合使用,本文通过学习concat和updatexml函数的使用方法,结合实例来理解这种sql注入方式的原理. con ...

  3. 四面快手、终拿Offer,想告诉你的一些事情

    本篇面经来自于群里粉丝朋友的分享,希望对你有所帮助! 快手高开及以上职级面试 是没有笔试或者机试的,所以从第一轮开始就是直接面对面试官. 一轮 主要考察对Java基础的理解和深入程度. Spring ...

  4. Java 添加Word文本水印、图片水印

    水印是一种常用于各种文档的声明.防伪手段,一般可设置文字水印或者加载图片作为水印.以下内容将分享通过Java编程给Word文档添加水印效果的方法,即 文本水印 图片水印 使用工具:Free Spire ...

  5. Spring Boot Redis 解析

    redis使用示例 本示例主要内容 使用lettuce操作redis redis字符串存储(RedisStringController.java) redis对象存储(RedisObjectContr ...

  6. [Spring cloud 一步步实现广告系统] 4. 通用代码模块设计

    一个大的系统,在代码的复用肯定是必不可少的,它能解决: 统一的响应处理(可以对外提供统一的响应对象包装) 统一的异常处理(可以将业务异常统一收集处理) 通用代码定义.配置定义(通用的配置信息放在统一的 ...

  7. JMeter压测“java.net.SocketException: Socket closed”解决方法

    报错详情: java.net.SocketException: Socket closed at java.net.SocketInputStream.socketRead0(Native Metho ...

  8. Java - java概述

    简介: JAVA是一门面向对象的编程语言 1995有sun公司发布 java程序执行流程: xxxjava源文件, 经过编译器编译 产生字节码文件 字节码交给解释器 解释成当前平台的本地机器指令 名词 ...

  9. 松软科技带你学开发:SQL--COUNT() 函数

    SQL COUNT() 语法 SQL COUNT(column_name) 语法 COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入): SELECT COUNT(col ...

  10. webpack + typescript + babel打包*.min.js文件的环境配置

    将多个*.ts文件打包成一个*.min.js文件的开发配置 1.初始化 npm init 新建以下文件目录: 2.安装依赖: "devDependencies": { " ...