网库网(www.wangkuwang.com)精品网站源码,织梦建站模版,游戏源代码分享平台

模板户源码

当前位置:首页 -> CMS教程 -> 其它教程 正文

咪蒙注销后,我用Python对其1013篇历史文章做了一次深度的数据分析...

时间:2019-03-18 07:55:28 [整站源码]作者:zhaopulei


程序员共成长 IT有个圈儿
点击上方“IT有个圈儿”,选择“置顶”或“星标”公众号”

▲ 点击图片  免费领取 ▲

前两天,公众号咪蒙注销成为热点话题。历史文章都不能看了,好在今天一个小伙伴分享了咪蒙所有文章的压缩包。

因为是直接从文件中读取数据,相比于从公众号中抓取文章要方便很多。最吸引我的说实话就是标题,读者都是被标题吸引了才去选择是否读你的文章。咪蒙这一点真的厉害。

总共1013篇文章,直接读取文件夹中的所有文件就好,

import os
import re
files = os.listdir(r"E:BaiduNetdiskDownload咪蒙咪蒙全部文章PDF")
for i in files:
  # 通过正则匹配标题中的日期
  mat = re.search(r"(d{4}_d{1,2}_d{1,2} )", i)
  re_str = mat.groups()[0]
  # 替换日期和文件后缀名
  file_name = i.replace(re_str,).replace(.pdf,)
  # 去掉图片标题
  if file_name == "分享图片":
      continue
  print(file_name)

更直观的去看标题,可以通过WorldCloud生成词云图。这里文章太多,生成所有标题的词云可能看不太清,所以只生成了近期部分标题。

import numpy as np
from PIL import Image
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 读取所有文件的标题,存在txt文本中
with open(标题.txtr, encoding=utf-8as f:
  word = (f.read())
  f.close()

# 图片模板和字体
image = np.array(Image.open(背景图片.jpg))
# 指定字体,否则汉字不显示
font_path=yahei.ttf

# 结巴粉刺
wordlist_after_jieba = jieba.cut(word)
# 分词结果
wl_space_split = " ".join(wordlist_after_jieba)
# 关键一步
my_wordcloud = WordCloud(scale=4, font_path=font_path,mask=image, background_color=white,
                       max_words=1000, max_font_size=55, random_state=24).generate(wl_space_split)
# 显示生成的词云
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
# 保存生成的图片
my_wordcloud.to_file(result.jpg)

为了美观用在线工具生成了词云,就假装是我生成的吧

从上图中看出来,真的是在标题上煞废了苦心。标题只是让用户打开,只有内容才能真正的留住用户。那究竟什么内容这么吸引人呢?

因为拿到的文件格式是PDF文件,因此可以通过Python的pdfminer3k库进行操作。

安装库

pip3 install pdfminer3k

代码如下

import sys
import importlib
import os
importlib.reload(sys)

from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

def readPDF(path, toPath):
   # 以二进制的形式打开PDF文件
   with open(path, "rb"as f:
       # 创建一个PDF解析器
       parser = PDFParser(f)
       # 创建PDF文档
       pdfFile = PDFDocument()
       # 文档放入解析器中
       parser.set_document(pdfFile)
       pdfFile.set_parser(parser)
       # 初始化密码
       pdfFile.initialize()
       # 检测文档是否可以转换成txt
   if not pdfFile.is_extractable:
       raise PDFTextExtractionNotAllowed
   else:
       # 解析数据
       # 数据管理
       manager = PDFResourceManager()
       # 创建一个PDF设备对象
       laparams = LAParams()
       device = PDFPageAggregator(manager, laparams=laparams)
       # 解释器对象
       interpreter = PDFPageInterpreter(manager, device)

       # 开始循环处理,每次处理一页
       for page in pdfFile.get_pages():
           interpreter.process_page(page)
           layout = device.get_result()
           for x in layout:
               if(isinstance(x, LTTextBoxHorizontal)):
                   with open(toPath, "a"as f:
                       str = x.get_text()
                       # print(str)
                       f.write(str.encode("gbk"ignore).decode("gbk""ignore")+"
"
)
path = r"E:BaiduNetdiskDownload咪蒙咪蒙全部文章PDF"

# 获取文件下所有PDF文件数组
files = os.listdir(r"E:BaiduNetdiskDownload咪蒙咪蒙全部文章PDF")
for i in files:
   # 拼接文件路径
   content_url = path + / + i
   readPDF(content_url, content.txt)
   print(f"{content_url} 读取完成")

全部文章大概300多万字左右,这里推荐使用多线程去操作。然后进行数据清洗,因为资料包里有些不相关的推广信息,以及文章的编辑、排版、配图人员的署名、日期等信息。

然后通过分词计算出热点关键词出现的次数。

import jieba
import csv

article = open(content.txt,r).read()
words = list(jieba.cut(article))
articleDict = {}
for w in set(words):
   if len(w)>1:
       articleDict[w] = words.count(w)
articlelist = sorted(articleDict.items(),key = lambda x:x[1], reverse = True)

#打开文件,追加a
out = open(mm_csv.csv,a, newline=)
#设定写入模式
csv_write = csv.writer(out,dialect=excel)
for i in range(10):
   # 关键词
   word = articlelist[i][0]
   # 出现次数
   num = articlelist[i][1]
   arr = [word, num]
   csv_write.writerow(arr)
print(已保存为csv文件.)

结果如下图所示

发现出现了很多社交关系中的称呼词。为了更直观的展示,可以通过pyecharts进行柱状图显示。

文章中大部分从孩子、父母、男生、女生、闺蜜等话题展开。另外之所以朋友这个词出现在前面,因为很多文章都是讲述"朋友"的故事。

之前看过一篇文章,分析了咪蒙的微博(现已关闭),粉丝将近200W,其中女性粉丝占据了85%。年龄段在23-28岁之间,这个年龄段的女生对理想中的生活比较向往,而咪蒙的文章就是说出了他们的心声,文中狂喷渣男,直男。作为理工男加程序员我的内心是这样子的。

最后根据高频词生成了一个词云图,背景图片用的是咪蒙的头像。

写在最后

翻了几篇文章发现配图非常的小清新,可能就是用来掩盖鸡汤的毒吧。《寒门状元之死》在网上扒出了许多槽点,为了人气不惜歪曲事实,虚构场景。而且很多文章中出现频繁出现不雅词语。

引用网上的一句话

一部分人讨厌咪蒙,

是因为无法忍受文明世界里一个满口脏话的公知,

是因为我们受够了她不良的蛊惑,

是因为我们相信我们关注的公众号应该有底线和正确的三观,

是因为我们还是一群有良知有思考的年轻人。

比起这种大起大落,我更愿意体会那些渺小的成就感。

比如,程序启动一切正常,说服产品不改需求了,发现BUG就知道哪里出了问题。

-END-

本文选自「 程序员共成长 」

小编整理了以下Python视频资料

公众号后台回复“p”即可马上获得!



圈子里的人和事儿

点点更精彩



  马云    马化腾    周鸿祎    任正非

  华为    百度    阿里    腾讯   美团

藏经阁


互联网  ☞ 限时免费领取 | 50本互联网人必备书籍


架构师 ☞ 做了5年开发,为什么你的技术还是菜

 

微服务 ☞ 微服务 2.0 技术栈选型手册

   

人工智能   ☞ 码农,都是如何规划未来的?

 

在公众号后台对话框输入以下关键词

下载更多优质内容


区块链 | 白皮书 | 微服务 | 物联网 | AI

好文,就给我点“好看”

    发送中

    本文标签:AutoTags插件服务端需要您提供购买者的账号和密码才能继续访问  折翼天使  莎莎源码  吾爱源码  其他源码 

    转载请注明来源:PHP手机端发卡多种支付商业版源码

    本文永久链接地址:https://www.suibianlu.com/11942.html

    郑重声明:
    本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
    若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
    如无法链接失效或侵犯版权,请给我们来信:admin@suibianlu.com

    栏目导航
    最新文章
    热门文章
    Top