1. 程式人生 > >分析咪蒙1013篇文章,300多萬字,她憑什麽會火?

分析咪蒙1013篇文章,300多萬字,她憑什麽會火?

dft down imshow continue textbox apar number java開發 pip

文章首發於公眾號:程序員共成長

咪蒙,文學碩士,駕馭文字能力極強。並且是一個擁有一千多萬粉絲,每篇文章閱讀量都100W+,頭條發個軟文都能賺80萬,永遠都能抓住粉絲G點的那個女人。

1月份因為某篇文章,在網絡上被一大批網友炮轟。我也因此關註了她。一開始發現她的文章非常接地氣,基本都是和生活緊密相連,但看的多了,發現經常在文中非常平滑的挑起某種關系之間的矛盾。很大一部分文章都是圍繞女性展開話題。而且每天更新時間都在晚上十一點左右,幾乎從來不間斷。包括春節。

2015年9月15日,公眾號第一篇文章《女友對你作?你應該謝天謝地,因為她愛你》,直男癌表示理解不來這話什麽意思。 昨天公眾號註銷,又一次成為熱點話題。歷史文章也都不能看了,好在今天一個小夥伴分享了咪蒙所有文章的壓縮包。

因為是直接從文件中讀取數據,相比於從公眾號中抓取文章要方便很多。最吸引我的說實話就是標題,讀者都是被標題吸引了才去選擇是否讀你的文章。咪蒙這一點真的厲害。

總共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(‘標題.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‘)

  

 

畢竟小編主要還是java開發,Pyton實在是有點渣,為了美觀用在線工具生成了詞雲,就假裝是我生成的吧

技術分享圖片


技術分享圖片

從上圖中看出來,真的是在標題上煞廢了苦心。標題只是讓用戶打開,只有內容才能真正的留住用戶。那究竟什麽內容這麽吸引人呢?

因為拿到的文件格式是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")+"\n")
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就知道哪裏出了問題。

再比如,看完這篇文章的你能點個贊,點個關註。


關註公眾號,回復「咪蒙」可獲取她的所有文章。回復「獲取資源」更精彩

技術分享圖片

分析咪蒙1013篇文章,300多萬字,她憑什麽會火?