▲ 来源丨 程序员共成长

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

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

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

import osimport 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 npfrom PIL import Imageimport jiebafrom wordcloud import WordCloudimport matplotlib.pyplot as plt# 读取所有文件的标题,存在txt文本中with open('标题.txt', 'r', encoding='utf-8') as 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 sysimport importlibimport os
importlib.reload(sys)from pdfminer.pdfparser import PDFParser, PDFDocumentfrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreterfrom pdfminer.converter import PDFPageAggregatorfrom pdfminer.layout import LTTextBoxHorizontal, LAParamsfrom pdfminer.pdfinterp import PDFTextExtractionNotAlloweddef 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()# 检测文档是否可以转换成txtif not pdfFile.is_extractable:raise PDFTextExtractionNotAllowedelse:# 解析数据# 数据管理
       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 jiebaimport 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读mat文件_我用Python对咪蒙的1013篇历史文章做了一次深度的数据分析...相关推荐

  1. python 读plt文件_用python读Excel文件

    在IC设计.验证.后端中经常会用Excel来做配置文件.寄存器表.定义后端SDC参数等,不管Excel好不好用,但学习成本低啊. Excel文件的结构 Excel文件主要由工作簿(book).工作表( ...

  2. python导入mat文件_从.mat文件导入复杂数据作为numpy数组

    我有一个关于元组的问题.我使用了一个程序,它以.mat格式转储大量输出的三维数组.它们在MATLAB中工作得很好.它们是较新的.mat格式(基于HDF5). 假设我在MATLAB中生成了一个10x10 ...

  3. python读取hdf5文件_科学网—python读hdf5文件 - 钱磊的博文

    读hdf5文件和读fits差不多,需要知道类似文件头的东西,这里是一个变量的名称.这可以通过定义一个prt函数结合h5py报的工具来实现如下 def prt(name): print(name) fi ...

  4. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  5. python打开dat文件_科学网—Python: 文件的打开,读写和关闭 - 刘洋洋的博文

    文件打开,读写和关闭的顺序: 打开文件:# 打开后才能进行读写 读文件或写文件: 文件关闭.# Python会缓存写入的数据,如果程序异常崩溃,数据就不能写入到文件当中.安全起见,文件用完后要主动关闭 ...

  6. python处理pdf文件_好玩的Python 篇一:用Python显示和处理PDF文件

    好玩的Python 篇一:用Python显示和处理PDF文件 2020-05-25 00:20:30 0点赞 0收藏 0评论 pdf是电子书,文档经常会用的格式,除了下载各种阅读器以外,我们也可以用P ...

  7. python编辑svg文件_如何从Python修改SVG文件的属性?

    我有一个由地图数据可视化软件'Kartograph'生成的svg文件.它包含表示地图上区域的大量路径.这些路径每个都有一些数据字段: 因此我不必每次都生成一个新的svg文件,我想在python中修改一 ...

  8. python怎么对齐文件_说说在 python 中,如何对齐文本

    在 python 中,可用 rjust() . ljust() 和 center() 方法分别实现文本右对齐.左对齐以及居中对齐功能. 它们的第一个参数是一个整数,表示填充后的总长度.不足的部分,使用 ...

  9. python怎么编辑文件_如何使用python中的方法对文件进行修改文件名

    在使用python语言中的方法操作文件时,打开方法可以直接使用open,但是对文件重命名需要调用os模块中的方法,删除文件也是 工具/原料 python 编辑器 截图工具 台式机 方法/步骤 1 进入 ...

最新文章

  1. 数据结构中等号表示什么_通过分析2016年最重要的252个中等故事我学到了什么...
  2. https协议原理过程
  3. Linux chattr命令详解
  4. 超级节点根据自身的能力参与维基链生态建设
  5. 慧荣科技获GSA年度大奖
  6. S4:装饰模式 Decorator
  7. LeetCode 700. 二叉搜索树中的搜索
  8. 使用ObjectDataSource 显示数据
  9. CSS3 伪类和伪元素
  10. 18 ubuntu 远程原生_CNCF公布中国云原生调查报告:49%使用容器技术,Kubernetes 应用率达 72%...
  11. B站 React教程笔记day1(4)调色板案例
  12. Eclipse中Maven的设定
  13. EasyRecovery 15win/mac易恢复序列号
  14. 关于layuiAdmin 后台管理模板购买授权的问题
  15. Junit4测试报错:java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter
  16. Ubuntu安装与Xshell的配置
  17. 浏览器网页翻译插件选十大翻译器网页翻译插件
  18. 华东师范大学计算机考研信息汇总
  19. 在子域下安装Exchange服务器并批量生成用户为每一位用户建立邮箱
  20. 中标麒麟5.0安装(内含安装包)-小白手把手史上最全教程!

热门文章

  1. 微软发布面向企业区块链网络的Coco Framework
  2. 安卓适配屏幕-4.x5.x
  3. Linux中telnet命令
  4. Exchange 技巧(1) Exchange2010 邮件收发统计
  5. 为什么我们需要域?MS Active Directory系列之一
  6. Tomcat version 5.5 only supports J2EE 1.2, 1.3, and 1.4 Web modules
  7. 制作GHOST XP 基于自由天空驱动包+SysPacker 2.1
  8. 20muduo_base库源码分析(十一)
  9. python爬虫篇:为了追个漫画我居然用上爬虫,别人说我不讲武德
  10. linux模块builtin是什么意思,Linux命令手册