欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Python爬取微博數(shù)據(jù)生成詞云圖片實(shí)例代碼

 更新時(shí)間:2017年08月31日 11:05:36   作者:FOOFISH  
這篇文章主要給大家介紹了關(guān)于利用Python爬取微博數(shù)據(jù)生成詞云圖片的相關(guān)資料,文中通過(guò)示例代碼介紹非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

在很早之前寫(xiě)過(guò)一篇怎么利用微博數(shù)據(jù)制作詞云圖片出來(lái),之前的寫(xiě)得不完整,而且只能使用自己的數(shù)據(jù),現(xiàn)在重新整理了一下,任何的微博數(shù)據(jù)都可以制作出來(lái),一年一度的虐汪節(jié),是繼續(xù)蹲在角落默默吃狗糧還是主動(dòng)出擊告別單身汪加入散狗糧的行列就看你啦,七夕送什么才有心意,程序猿可以試試用一種特別的方式來(lái)表達(dá)你對(duì)女神的心意。有一個(gè)創(chuàng)意是把她過(guò)往發(fā)的微博整理后用詞云展示出來(lái)。本文教你怎么用Python快速創(chuàng)建出有心意詞云,即使是Python小白也能分分鐘做出來(lái)。下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

準(zhǔn)備工作

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

# 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文件中包含上面的幾個(gè)依賴(lài)包,如果用pip方式安裝失敗,推薦使用Anaconda安裝

pip install -r requirement.txt

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

打開(kāi)微博移動(dòng)端網(wǎng)址 https://m.weibo.cn/searchs ,找到女神的微博ID,進(jìn)入她的微博主頁(yè),分析瀏覽器發(fā)送請(qǐng)求的過(guò)程

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

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

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

{
 "cardlistInfo": {
 "containerid": "1076031192515960",
 "total": 4754,
 "page": 2
 },
 "cards": [
 {
 "card_type": 9,
 "mblog": {
 "created_at": "08-26",
 "idstr": "4145069944506080",
 "text": "瑞士一日游圓滿(mǎn)結(jié)束...",
 }
 }]
}

第二步:構(gòu)建請(qǐng)求頭和查詢(xún)參數(shù)

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

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是微博用戶(hù)的id
  • containerid雖然不什么意思,但也是和具體某個(gè)用戶(hù)相關(guān)的參數(shù)
  • page 分頁(yè)參數(shù)

第三步:構(gòu)造簡(jiǎn)單爬蟲(chóng)

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

def fetch_data(uid=None, container_id=None):
 """
 抓取數(shù)據(jù),并保存到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:
  # 每條微博的正文內(nèi)容
  if card.get("card_type") == 9:
  text = card.get("mblog").get("text")
  text = clean_html(text)
  blogs.append(text)
 page += 1
 print("抓取第{page}頁(yè),目前總共抓取了 {count} 條微博".format(page=page, count=len(blogs)))
 with codecs.open('weibo1.txt', 'w', encoding='utf-8') as f:
  f.write("\n".join(blogs))

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

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

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)

最終效果圖:

完整示例代碼如下:

# -*- coding:utf-8 -*-
import codecs
import re

import jieba.analyse
import matplotlib.pyplot as plt
import requests
from scipy.misc import imread
from wordcloud import WordCloud

__author__ = 'liuzhijun'

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",
}


def clean_html(raw_html):
  pattern = re.compile(r'<.*?>|轉(zhuǎn)發(fā)微博|//:|Repost|,|?|。|、|分享圖片|回復(fù)@.*?:|//@.*')
  text = re.sub(pattern, '', raw_html)
  return text


url = "https://m.weibo.cn/api/container/getIndex"
params = {"uid": "{uid}",
     "luicode": "20000174",
     "featurecode": "20000320",
     "type": "uid",
     "value": "1705822647",
     "containerid": "{containerid}",
     "page": "{page}"}


def fetch_data(uid=None, container_id=None):
  """
  抓取數(shù)據(jù),并保存到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:
      # 每條微博的正文內(nèi)容
      if card.get("card_type") == 9:
        text = card.get("mblog").get("text")
        text = clean_html(text)
        blogs.append(text)
    page += 1
    print("抓取第{page}頁(yè),目前總共抓取了 {count} 條微博".format(page=page, count=len(blogs)))
    with codecs.open('weibo1.txt', 'w', encoding='utf-8') as f:
      f.write("\n".join(blogs))


def grey_color_func(word, font_size, position, orientation, random_state=None,
          **kwargs):
  s = "hsl(0, 0%%, %d%%)" % 0
  return s


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)


if __name__ == '__main__':
  fetch_data("1192515960", "1076031192515960")
  generate_image()

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 15款Python編輯器的優(yōu)缺點(diǎn),別再問(wèn)我“選什么編輯器”啦

    15款Python編輯器的優(yōu)缺點(diǎn),別再問(wèn)我“選什么編輯器”啦

    這篇文章主要介紹了15款Python編輯器的優(yōu)缺點(diǎn),別再問(wèn)我“選什么編輯器”啦,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • keras slice layer 層實(shí)現(xiàn)方式

    keras slice layer 層實(shí)現(xiàn)方式

    這篇文章主要介紹了keras slice layer 層實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 對(duì)Python 多線(xiàn)程統(tǒng)計(jì)所有csv文件的行數(shù)方法詳解

    對(duì)Python 多線(xiàn)程統(tǒng)計(jì)所有csv文件的行數(shù)方法詳解

    今天小編就為大家分享一篇對(duì)Python 多線(xiàn)程統(tǒng)計(jì)所有csv文件的行數(shù)方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • python搭建虛擬環(huán)境的步驟詳解

    python搭建虛擬環(huán)境的步驟詳解

    相信每位python都知道,進(jìn)行不同的python項(xiàng)目開(kāi)發(fā),有的時(shí)候會(huì)遇到這樣的情況:python 版本不一樣,使用的軟件包版本不一樣。這種問(wèn)題最佳的解決辦法是為不同的項(xiàng)目搭建獨(dú)立的 python 環(huán)境。下面來(lái)一起看看吧。
    2016-09-09
  • python制作的天氣預(yù)報(bào)小工具(gui界面)

    python制作的天氣預(yù)報(bào)小工具(gui界面)

    大家好??!我用Tkinter寫(xiě)了一個(gè)天氣預(yù)報(bào)小工具,支持34個(gè)省級(jí)行政區(qū)以及港澳臺(tái)地區(qū)天氣,覆蓋全面。程序打包好放在了藍(lán)奏云,與大家分享一下。
    2021-05-05
  • Django日志和調(diào)試工具欄實(shí)現(xiàn)高效的應(yīng)用程序調(diào)試和性能優(yōu)化

    Django日志和調(diào)試工具欄實(shí)現(xiàn)高效的應(yīng)用程序調(diào)試和性能優(yōu)化

    這篇文章主要介紹了Django日志和調(diào)試工具欄實(shí)現(xiàn)高效的應(yīng)用程序調(diào)試和性能優(yōu)化,Django日志和調(diào)試工具欄為開(kāi)發(fā)者提供了快速定位應(yīng)用程序問(wèn)題的工具,可提高調(diào)試和性能優(yōu)化效率,提高應(yīng)用程序的可靠性和可維護(hù)性
    2023-05-05
  • pymysql模塊的操作實(shí)例

    pymysql模塊的操作實(shí)例

    在本篇文章里小編給大家分享的是關(guān)于pymysql模塊的簡(jiǎn)單操作,有需要的朋友們可以參考下。
    2019-12-12
  • Python設(shè)計(jì)模式結(jié)構(gòu)型組合模式

    Python設(shè)計(jì)模式結(jié)構(gòu)型組合模式

    這篇文章主要介紹了Python設(shè)計(jì)模式結(jié)構(gòu)型組合模式,組合模式即Composite?Pattern,將對(duì)象組合成成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),組合模式使得用戶(hù)對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性,下文具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-02-02
  • Python使用pycharm實(shí)現(xiàn)無(wú)限彈窗程序

    Python使用pycharm實(shí)現(xiàn)無(wú)限彈窗程序

    這篇文章主要為大家詳細(xì)介紹了Python如何,pycharm實(shí)現(xiàn)無(wú)限彈窗程序,當(dāng)然這一程序非病毒程序,僅整蠱使用,感興趣的小伙伴可以了解一下
    2024-01-01
  • python列表[list]和元組(tuple)詳情

    python列表[list]和元組(tuple)詳情

    這篇文章主要介紹了python列表[list]和元組(tuple)詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08

最新評(píng)論