自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 后端
很早之前寫過一篇怎么利用微博數(shù)據(jù)制作詞云圖片出來,之前的寫得不完整,而且只能使用自己的數(shù)據(jù),現(xiàn)在重新整理了一下,任何的微博數(shù)據(jù)都可以制作出來,放在今天應(yīng)該比較應(yīng)景。

很早之前寫過一篇怎么利用微博數(shù)據(jù)制作詞云圖片出來,之前的寫得不完整,而且只能使用自己的數(shù)據(jù),現(xiàn)在重新整理了一下,任何的微博數(shù)據(jù)都可以制作出來,放在今天應(yīng)該比較應(yīng)景。

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

準備工作

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

 

  1. # requirement.txt 
  2. jieba==0.38 
  3. matplotlib==2.0.2 
  4. numpy==1.13.1 
  5. pyparsing==2.2.0 
  6. requests==2.18.4 
  7. scipy==0.19.1 
  8. wordcloud==1.3.1 

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

  1. pip install -r requirement.txt 

第一步:分析網(wǎng)址

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

 

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

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

 

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

再來分析接口的返回結(jié)果,返回數(shù)據(jù)是一個JSON字典結(jié)構(gòu),total 是微博總條數(shù),每一條具體的微博內(nèi)容封裝在 cards 數(shù)組中,具體內(nèi)容字段是里面的 text 字段。很多干擾信息已隱去。

 

  1.     "cardlistInfo": { 
  2.         "containerid""1076031192515960"
  3.         "total": 4754, 
  4.         "page": 2 
  5.     }, 
  6.     "cards": [ 
  7.         { 
  8.             "card_type": 9, 
  9.             "mblog": { 
  10.                 "created_at""08-26"
  11.                 "idstr""4145069944506080"
  12.                 "text""瑞士一日游圓滿結(jié)束..."
  13.             } 
  14.         }] 

第二步:構(gòu)建請求頭和查詢參數(shù)

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

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

 

 

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

第三步:構(gòu)造簡單爬蟲

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

  1. def fetch_data(uid=None, container_id=None): 
  2.     ""
  3.     抓取數(shù)據(jù),并保存到CSV文件中 
  4.     :return
  5.     ""
  6.     page = 0 
  7.     total = 4754 
  8.     blogs = [] 
  9.     for i in range(0, total // 10): 
  10.         params['uid'] = uid 
  11.         params['page'] = str(page) 
  12.         params['containerid'] = container_id 
  13.         res = requests.get(url, params=params, headers=HEADERS) 
  14.         cards = res.json().get("cards"
  15.  
  16.         for card in cards: 
  17.             # 每條微博的正文內(nèi)容 
  18.             if card.get("card_type") == 9: 
  19.                 text = card.get("mblog").get("text"
  20.                 text = clean_html(text) 
  21.                 blogs.append(text) 
  22.         page += 1 
  23.         print("抓取第{page}頁,目前總共抓取了 {count} 條微博".format(page=page, count=len(blogs))) 
  24.         with codecs.open('weibo1.txt''w', encoding='utf-8'as f: 
  25.             f.write("\n".join(blogs)) 

 

 

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

 

第四步:分詞處理并構(gòu)建詞云

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

 

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

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

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

 

完整代碼可以回復(fù)“qixi”獲取,對了,還有上周的送書活動已經(jīng)結(jié)束,明天會公布獲獎的朋友們。

責(zé)任編輯:未麗燕 來源: Python之禪
相關(guān)推薦

2021-06-10 07:49:28

Python詞云圖wordcloud

2022-08-11 11:20:49

Python詞云圖

2020-02-17 16:19:26

CODING

2019-04-03 10:24:28

詞云圖工具詞云

2021-07-07 06:52:17

云圖word-cloud工具

2011-04-12 11:12:20

Oracle存儲過程

2016-01-04 11:18:00

KubernetesKubernetes概容器技術(shù)

2010-05-10 10:46:07

Oracle存儲過程

2016-03-04 13:45:56

七牛云

2021-03-08 08:11:09

Pyecharts可視化工具云圖

2010-08-16 13:56:43

2010-08-04 11:12:09

路由器密碼

2019-10-08 14:19:47

智慧城市大數(shù)據(jù)平臺城市大數(shù)據(jù)

2010-08-19 13:14:17

DB2自動增長主鍵

2025-02-26 00:48:32

2009-08-07 14:47:23

C#路徑問題

2024-01-29 08:32:10

Python驗證碼識別

2014-09-16 22:54:04

微軟云計算

2010-08-05 09:03:27

DB2 9.5高可用性

2017-07-19 10:22:07

點贊
收藏

51CTO技術(shù)棧公眾號