Python小白都會的如何生成詞雲圖片

2020-12-08 TechWeb

很早之前寫過一篇怎麼利用微博數據製作詞雲圖片出來,之前的寫得不完整,而且只能使用自己的數據,現在重新整理了一下,任何的微博數據都可以製作出來,放在今天應該比較應景。

一年一度的虐汪節,是繼續蹲在角落默默吃狗糧還是主動出擊告別單身汪加入撒狗糧的行列就看你啦,七夕什麼樣的禮顯得特別,程序猿可以試試用一種特別的方式來表達你對女神的心意,有一個創意是把她過往發的微博整理後用詞雲展示出來發給她。本文教你怎麼用Python快速創建出有心意詞雲,Python小白也能分分鐘做出來。

準備工作

本環境基於Python3,理論上Python2.7也是可行的,先安裝必要的第三方依賴包:

# requirement.txt jieba==0.38 matplotlib==2.0.2 numpy==1.13.1 pyparsing==2.2.0 requests==2.18.4 scipy==0.19.1 wordcloud==1.3.1 

requirement.txt 文件中包含上面的幾個依賴包,如果用 pip 方式安裝失敗,推薦使用 Anaconda 安裝

pip install -r requirement.txt 

第一步:分析網址

打開微博移動端網址 https://m.weibo.cn/searchs ,找到女神的微博ID,進入她的微博主頁,分析瀏覽器發送請求的過程

打開 Chrome 瀏覽器的調試功能,選擇 Network 菜單,觀察到獲取微博數據的的接口是 https://m.weibo.cn/api/container/getIndex ,後面附帶了一連串的參數,這裡面有些參數是根據用戶變化的,有些是固定的,先提取出來。

uid=1192515960& luicode=10000011& lfid=100103type%3D3%26q%3D%E6%9D%8E%E5%86%B0%E5%86%B0& featurecode=20000320& type=user& containerid=1076031192515960 

再來分析接口的返回結果,返回數據是一個JSON字典結構,total 是微博總條數,每一條具體的微博內容封裝在 cards 數組中,具體內容欄位是裡面的 text 欄位。很多幹擾信息已隱去。

{     "cardlistInfo": {         "containerid": "1076031192515960",         "total": 4754,         "page": 2     },     "cards": [         {             "card_type": 9,             "mblog": {                 "created_at": "08-26",                 "idstr": "4145069944506080",                 "text": "瑞士一日遊圓滿結束...",             }         }] } 

第二步:構建請求頭和查詢參數

分析完網頁後,我們開始用 requests 模擬瀏覽器構造爬蟲獲取數據,因為這裡獲取用戶的數據無需登錄微博,所以我們不需要構造 cookie信息,只需要基本的請求頭即可,具體需要哪些頭信息也可以從瀏覽器中獲取,首先構造必須要的請求參數,包括請求頭和查詢參數。

headers = {     "Host": "m.weibo.cn",     "Referer": "https://m.weibo.cn/u/1705822647",     "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) "                   "Version/9.0 Mobile/13B143 Safari/601.1", }  params = {"uid": "{uid}",           "luicode": "20000174",           "featurecode": "20000320",           "type": "uid",           "value": "1705822647",           "containerid": "{containerid}",           "page": "{page}"}  uid是微博用戶的id containerid雖然不什麼意思,但也是和具體某個用戶相關的參數 page 分頁參數

第三步:構造簡單爬蟲

通過返回的數據能查詢到總微博條數 total,爬取數據直接利用 requests 提供的方法把 json 數據轉換成 Python 字典對象,從中提取出所有的 text 欄位的值並放到 blogs 列表中,提取文本之前進行簡單過濾,去掉無用信息。順便把數據寫入文件,方便下次轉換時不再重複爬取。

def fetch_data(uid=None, container_id=None):     """     抓取數據,並保存到CSV文件中     :return:     """     page = 0     total = 4754     blogs = []     for i in range(0, total // 10):         params['uid'] = uid         params['page'] = str(page)         params['containerid'] = container_id         res = requests.get(url, params=params, headers=HEADERS)         cards = res.json().get("cards")          for card in cards:             # 每條微博的正文內容             if card.get("card_type") == 9:                 text = card.get("mblog").get("text")                 text = clean_html(text)                 blogs.append(text)         page += 1         print("抓取第{page}頁,目前總共抓取了 {count} 條微博".format(page=page, count=len(blogs)))         with codecs.open('weibo1.txt', 'w', encoding='utf-8') as f:             f.write("".join(blogs)) 

第四步:分詞處理並構建詞雲

爬蟲了所有數據之後,先進行分詞,這裡用的是結巴分詞,按照中文語境將句子進行分詞處理,分詞過程中過濾掉停止詞,處理完之後找一張參照圖,然後根據參照圖通過詞語拼裝成圖。

def generate_image():     data = []     jieba.analyse.set_stop_words("./stopwords.txt")      with codecs.open("weibo1.txt", 'r', encoding="utf-8") as f:         for text in f.readlines():             data.extend(jieba.analyse.extract_tags(text, topK=20))         data = " ".join(data)         mask_img = imread('./52f90c9a5131c.jpg', flatten=True)         wordcloud = WordCloud(             font_path='msyh.ttc',             background_color='white',             mask=mask_img         ).generate(data)         plt.imshow(wordcloud.recolor(color_func=grey_color_func, random_state=3),                    interpolation="bilinear")         plt.axis('off')         plt.savefig('./heart2.jpg', dpi=1600) 

簡單四步就完成了,最終效果圖:

完整代碼可以回復「qixi」獲取,對了,還有上周的送書活動已經結束,明天會公布獲獎的朋友們。

點讚 0

相關焦點

  • 小白如何安裝Python?分分鐘搞定!
    Hello,大家好,我是橘子呀~前一期給大家簡單介紹了一下python是什麼,Python的優勢以及Python在工作中的重要性,那麼就有很多同學說:「橘子,橘子,我想學Python但是現在到第一步就卡殼了,不會安裝python軟體呀。」
  • 美翻朋友圈:用Python生成蒙太奇馬賽克圖片
    題圖 | 視覺中國我們有時候會聽到這麼一個詞--「蒙太奇」,但卻不知道這個詞是什麼意思。蒙太奇原為建築學術語,意為構成、裝配。而後又延伸為一種剪輯理論:當不同鏡頭拼接在一起時,往往又會產生各個鏡頭單獨存在時所不具有的特定含義。
  • |python|電氣和電子工程師協會|編程...
    這幾天暴漲的」雲辦公「、」雲教育「就是一個最好的例子,可以預期的未來,這些產品的需求都會幾何倍數增大,類似於2003年的阿里巴巴那樣得到飛躍發展。所謂好的投資,就是找準時代的方向。股市投資如此,對自身的教育投資亦然。前段時間,56歲的潘石屹在微博上表示,自己將開始學習新的語言Python,作為自己人生的禮物。
  • 在線文字雲生成工具WordArt(製作教程)
    WordArt是一個文字雲生成網站,稱為文字雲圖,又稱為詞雲圖,是一款製作文字雲效果圖的在線免費軟體,對文本中出現頻率較高的「關鍵詞」以視覺化的形式呈現,是在新媒體圖文、ppt、科研和宣傳中較為適用的工具。
  • 人生苦短,我用Python,那麼問題來了,普通人要學python嗎?
    話說在金融和IT行當混跡了多年,python一直是被我隨手拿來當個小工具用用,有時候偷懶用python弄個excel自動化整理工具,有時候拿來上各種網站爬蟲搜集點信息,有時候也會拿來寫點量化小工具。那麼到底什麼是python?
  • 如何python創建炫酷的動態二維碼
    今天教大家如何一步一步去製作一個炫酷的二維碼這個需要用到我們的python語言,並且需要安裝一個製作二維碼的庫Myqr第一步安裝Myqr,安裝python就不在介紹了,安裝Myqr庫。,shift+右鍵,在彈出的右鍵菜單中單擊「在此出打開命令窗口」,我們進入cmd控制臺(進入控制臺方法較多,不在贅述)第二步 進入控制臺後 輸入 pip install Myqr 回車,我們只要等待庫自行安裝就好了,安裝完成後關閉命令控制臺第三步 創建一個python文件 mycode.py.導入下面的代碼,
  • 「python opencv視覺零基礎」十、圖片效果毛玻璃
    一、學習目標了解高斯模糊的使用方法了解毛玻璃的圖片效果添加了解如何自己做一個噪聲圖片目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • Python類庫Pillow實現圖片裁剪、縮放、效果增強等功能
    用於圖像歸檔和圖像批量處理,你可以使用它建立縮略圖,轉換格式,列印圖片等等,現在的版本可以驗證和讀取大量的圖片格式。im = Image.open('./2023163c.jpg')im.save('alibaba.png')運行結果:會在目錄內生成一個png格式圖片。
  • 這幾個常用的python庫你需要知道
    python可以說是近幾年最火熱、最實用的、最容易上手的工具之一了。功能強大、應用廣泛,可以幫你搜集工作數據,還能幫你下載音樂,電影,於是就掀起了一波學習python的大潮,小編也毫不猶豫的加入了。但是對於向小編一樣的小白來說,剛開始學習還是有些困難的,需要首先了解python的一些基礎知識。所以小編就整理了一些常用的python庫,希望對正在學習python的小夥伴有所幫助。1.MatplotlibMatplotlib是一個用於創建二維圖和圖形的底層庫。
  • 最全從Python小白到大牛,要走的路這裡都有(一)
    Python雖然對大多數小白來說,可能是從入門到放棄的過程。探究起來,可能初入門的同學沒見到過Python美麗的全景,一直埋頭寫hello world太多了,喪失了對Python的愛才是放棄的主要原因吧。在本文中,將用真實的代碼給你展示從小白到大牛Python項目之旅。只要你敢看,我就敢寫。開始吧!
  • 小白入門Python學習路線,詳解如何用Python十秒做表白神器?
    今天,我就來教大家一下,如何用Python做一份特別的禮物送給自己的戀人。當然了,如果還是單身的,也可以把這個作為表白神器,和心愛的人表白。會Python編程的人當然不用我說,就知道該如何操作,那些不懂編程的人,如果想嘗試,那該怎麼辦呢?首先教大家一個初級版的。
  • 《小灰教你零基礎學python》-Python入門語言
    在講解Python介紹之前我需要從解釋一些基礎概念,為了照顧零編程基礎小白。一、什麼是程序?電腦(包括手機)由硬體和程序構成:很多硬體 + 很多程序 = 電腦具體硬體和程序如何集成這個咱們不用太了解,這個是計算機設計原理裡面的東西了,咱只需要了解,電腦就是硬體(攝像頭、
  • Python程序圖片和pdf上文字識別實例一二
    實例一:先減少背景雜音,再做圖片文字識別 為了提高識別率,先用opencv-python對掃描的圖片做預處理(減少背景雜音),然後調用pytesseract
  • 如何系統學習Python?這三個坑千萬別踩!
    Hello,大家好,我是橘子呀~前兩期橘子給大家介紹了Python是什麼以及如何安裝Python軟體。雖然萬事開頭難,但是一個好的開始就是成功的一半了,學習Python對於小白來說無疑是枯燥乏味的,大家一定要沉下心來,不能急於求成,只要肯付出就會有收穫。
  • 如何用python在工作中「偷懶」?
    Excel自動化處理Excel合併在實際應用中可能會有不同月份的數據或者不同周的報告等等的Excel數據,都是單個獨立的文件,如果想要整體使用的話就需要合併一下,那麼如何利用python把指定目錄下的所有Excel數據合併成一個文件呢?
  • 最全的 Python 反爬蟲及應對方案!
    這種情況下,你該如何應對呢?本文梳理了常見的反爬措施和應對方案。 1. 通過User-Agent來控制訪問無論是瀏覽器還是爬蟲程序,在向伺服器發起網絡請求的時候,都會發過去一個頭文件:headers,比如知乎的requests headers。
  • 如何使用TensorFlow Hub的ESRGAN模型來在安卓app中生成超分圖片
    從一張低解析度的圖片生成一張對應的高解析度圖片的任務通常被稱為單圖超分(Single Image Super Resolution - SISR)。儘管可以使用傳統的插值方法(如雙線性插值和雙三次插值)來完成這個任務,但是產生的圖片質量卻經常差強人意。
  • 如何用Python生成馬賽克畫
    如何用Python生成馬賽克畫 馬賽克畫是一張由小圖拼成的大圖,本文的封面就是我們的效果圖,放大看細節,每一塊都是一張獨立的圖片,拼在一起組成一張大圖,感覺像是用馬賽克拼出來的畫,所以叫馬賽克畫。
  • 中科大統計學python_python 中科大 - CSDN
    學完這門課,你將能夠:理解驅動深度學習的主要技術趨勢;能夠搭建、訓練並且運用全連接的深層神經網絡;了解如何實現高效的(向量化)的神經網絡;理解神經網絡架構中的關鍵參數。p=24課程介紹:這門課程將學會理解如何診斷機器學習系統中的錯誤;能夠優先減小誤差最有效的方向;理解複雜ML設定,例如訓練/測試集不匹配,比較並/或超過人的表現;知道如何應用端到端學習、遷移學習以及多任務學習。
  • Pytest丨如何使用全功能的Python測試框架?小白必看
    pytest斷言前面說到pytest的斷言比較強大,它直接可以使用python自帶的斷言內容,當然不止而已,pytest還有一個重要的功能是可以重寫assert關鍵字,pytest會截斷對python中自帶的assert的調用然後替換成自己定位的assert,從而可以獲取更多的錯誤信息,讓我們知道具體哪裡出現了問題。編寫一個加法進行通過斷言驗證。