写这篇文章的思路来自于这样的一盘文章:《程序员的七夕应该这么过》。https://mp.weixin.qq.com/s/CF0rCG8r54AQIvVmBcqkpw
在写这篇文章之前,我对Python的涉猎并不多,很多基础知识都是现学现用,中间也出现了很多问题,最终也都一一解决,也是颇为不易。
在看这篇文章前,我的MAC还只有系统自带的Python2.7环境,而这篇文章要求的运行环境是Python3.0以上,为此,我并没有在七夕,也就是昨天就鼓捣出来整个项目,而是用了一个七夕去安装Python3.0的环境,真的要手动滑稽一下,hhhhhh。
在MAC上安装Python 3.0的教程,可以查看我的前一篇博客 :MAC 下 Python3 环境安装 
      言归正传,进入正题。
      首先介绍本人开发环境: 系统: MAC OS 10.12.5
                                                Python版本: Python 3.6
Conda版本: Conda 4.3.25
今天,我要做的是一件什么事情呢?就是要对微博数据进行爬取,然后对数据进行清洗加工后进行分词处理,将处理后的数据交给词云工具,再配合科学计算工具和绘图工具绘制出图像出来。
这一系列的工作,涉及到的工具包包括: 网络请求包 Requests、中文分词处理 jieba  、 词云处理 wordcloud 、 图片处理库 Pillow、科学计算工具 Numpy、2D绘图库 Matplotlib。
因此,下一步,就是一一下载上面提到的库。
下载的方法通过 pip install 和 conda install 结合起来,主要原因在于conda 无法找到 jieba 、和wordcloud这两款对应的工具包,只可以通过pip install下载。我在 MAC 下 Python3 环境安装 提到了如何为 conda 添加国内镜像源从而提高下载速度,在这里也提下如何添加 pip 国内镜像源来提高下载速度,附上相关链接,需要的自行查阅 http://blog.csdn.net/lambert310/article/details/52412059
在安装好相关工具之后,我们顺着《程序员的七夕应该这么过》的思路走。
首先,我们打开微博,搜索某某明星女神的微博,这里我们以李冰冰为例子来做分析,进入她的微博主页,分析浏览器的的发送请求过程。
刷新网页或者第一次请求网页,打开调试窗口,发现如下XHR请求,双击其中一条请求,我们可以查看这条请求的详细信息如下:
这里,我们首先分析请求链接: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&type=uid&value=1192515960&containerid=1076031192515960
通过这个链接可以提取出如下关键字:
uid=1192515960
luicode=10000011
lfid=100103type%3D3%26q%3D%E6%9D%8E%E5%86%B0%E5%86%B0
type=uid
value=1192515960
containerid=1076031192515960
且不管这些关键字的具体含义是什么,这些字段在接下来的爬取过程中将会用到。
再来分析请求的返回结果,返回数据是一个JSON字典结构,total 是微博总条数,每一条具体的微博内容封装在 cards 数组中
      
       分析完网页后,我们开始用 requests 模拟浏览器构造爬虫获取数据,因为这里获取用户的数据无需登录微博,所以我们不需要构造 cookie信息,只需要基本的请求头即可,具体需要哪些头信息也可以从浏览器中获取,首先构造必须要的请求参数,包括请求头和查询参数。这一部分内容,我们同样可以在同一个xhr请求中获得。
于是,我们可以构建如下headers:
headers = {
   "Host":"m.weibo.cn",
   "Referer":"https://m.weibo.cn/u/1705822647”,
   "User-Agent":"Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Mobile        Safari/537.36",
}
params = {"uid":"{uid}",
         "luicode":"20000174",
         "featurecode":"20000320",
         "type":"uid",
         "value":"1705822647",
         "containerid":"{containerid}",
         "page":"{page}”}
在经过前文的这些爬取准备基础之后,就可以开始构建我们的简单爬虫系统了,代码来源来自于:https://mp.weixin.qq.com/s/CF0rCG8r54AQIvVmBcqkpw
通过返回的数据能查询到总微博条数 total,爬取数据直接利用 requests 提供的方法把 json 数据转换成 Python 字典对象,从中提取出所有的 text 字段的值并放到 blogs 列表中,提取文本之前进行简单过滤,去掉无用信息。顺便把数据写入文件,方便下次转换时不再重复爬取。
def fetch_data(uid=None, container_id=None):
    """
   抓取数据,并保存到CSV文件中
    :return:
    """
    page = 0
    total = 4754
    blogs = []
    for iin 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 cardin 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("\n".join(blogs))
将爬取到的微博数据,保存在weibo1.txt文件里面,作为词元处理数据源。
下一步进行分词处理并构建词云。
爬虫了所有数据之后,先进行分词,这里用的是结巴分词,按照中文语境将句子进行分词处理,分词过程中过滤掉停止词,处理完之后找一张参照图,然后根据参照图通过词语拼装成图。
由于在MAC环境进行相关词云分析处理,wordcloud如果没有添加MAC环境下的中文字体库路径,将会出现中文乱码现象,因此,对原文的中文字体库路径做了更改,改为MAC环境下的字体库路径
def generate_image():
    data = []
    jieba.analyse.set_stop_words("./stopwords.txt”)
    alice_coloring = imread('./52f90c9a5131c.jpg', flatten=True)
    ##从背景图片生成颜色值
    image_colors = ImageColorGenerator(alice_coloring)
    with codecs.open("weibo1.txt", 'r', encoding="utf-8")as f:
        for textin 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’,
     ##添加MAC路径的中文字体库宋体作为标准字体库 
            font_path='/Library/Fonts/Songti.ttc',
            background_color='white',
            mask=mask_img
        ).generate(data)
       
        plt.imshow(wordcloud.recolor(color_func=image_colors, random_state=3),
                    interpolation="bilinear")
        plt.axis('off')
        plt.savefig('./heart2.jpg', dpi=1600)
至此,完成了从依赖库安装、Python微博数据采集、Python构建简单爬虫、Python分词处理并构建词云这一系列过程,完成效果如下:
在完成了《程序员的七夕应该这么过》这篇文章的主要思路之后,我本人对于最后的结果呈现效果并不是很满意,所以,进行了二次词云分解处理,思路来自于:http://www.cnblogs.com/lyrichu/p/6151265.html
最后的呈现结果如下所示:多了彩色效果好看多了。
最后,就是整体工作的总结了。在这篇文章中,介绍到的内容可以说是很多了,在很多内容上,我还只是处于知其然而不知其所以然的基础上,代码完整性也都是来自于《程序员的七夕应该这么过》。
不过对于Python小白的我,刚刚接触Python这个领域的世界,也被Python这个神奇的世界给迷住了。正所谓纸上得来终觉浅,绝知此事要躬行。我们看那诸多的技术博客,往往存在这样的两种人,一种人认为,哇,如此高大上,定是难以企及的物种;一种人则认为,不过如此,三两行代码而已,我何必动手,欣赏就好了。这样子,少了实战,一切都是镜花水月一般。  就比如我,若是没有经过这一天的实战折腾,又怎么会知道MAC 下Python3的安装,Conda的国内镜像源加速、wordcloud的中文乱码解决等等等,这些都是在实际开发中的经验。
所以啊,生命在于折腾啊。
不过,七夕都过了,我这要为谁做画像呢??难过一秒钟。

Python 微博画像分析相关推荐

  1. python微博文本分析_基于Python的微博情感分析系统设计

    基于 Python 的微博情感分析系统设计 王欣 ; 周文龙 [期刊名称] < <信息与电脑> > [年 ( 卷 ), 期] 2019(000)006 [摘要] 微博是当今公众 ...

  2. python微博爬虫分析_python爬取和分析新浪微博(一):scrapy构建新浪微博榜单、博主及微博信息爬虫...

    1. 爬虫项目介绍 爬虫首先基于python scrapy 框架,使用了随机用户代理和IP代理等反爬技巧,将爬取到的微博领域数据,各领域榜单博主信息和博主的微博信息分别存入的mysql数据库对应的表格 ...

  3. python微博爬虫分析_基于Python的新浪微博爬虫研究

    基于 Python 的新浪微博爬虫研究 吴剑兰 (江苏警官学院,江苏 南京 210031 ) [摘 要] 摘 要:对比新浪提供的 API 及传统的爬虫方式获取微博的优缺点, 采用模拟登陆和网页解析技术 ...

  4. python微博文本分析_Python 3.6实现单博主微博文本、图片及热评爬取

    环境介绍 Python3.6.2/Windows-7-64位/微博移动端 实现目标 将微博上你感兴趣的博主微博(全部或过滤非原创等)内容获取,包括微博文本.图片和热评,文本和热评按编号存入txt文件中 ...

  5. python微博文本分析_微博评论挖掘之Bert实战应用案例-文本情感分类

    Bert模型全称Bidirectional Encoder Representations from Transformers,主要分为两个部分:1训练语言模型(language model)的预训练 ...

  6. [Python人工智能] 三十四.Bert模型 (3)keras-bert库构建Bert模型实现微博情感分析

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章开启了新的内容--Bert,首先介绍Keras-bert库安装及基础用法及文本分类工作.这篇文章将通过keras- ...

  7. python微博评论情感分析_基于Python的微博情感分析系统设计

    2019 年第 6 期 信息与电脑 China Computer & Communication 软件开发与应用 基于 Python 的微博情感分析系统设计 王 欣 周文龙 (武汉工程大学邮电 ...

  8. Python 基于微博舆情分析系统的设计与实现,GUI可视化界面(毕业设计,附源码,教程)

    文章目录 1. 简介 2. 技术选型 3. 实现功能简介 **第4章系统总体设计** 5. 系统选型 1. 简介 微博舆情分析系统软件是一款方便,快捷,实用的信息服务查询软件.随着智能手机在全球市场的 ...

  9. (基于Python的毕业设计)微博舆情分析系统(附源码+论文)

    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦. 目录 一.项目简介 二.系统设计 2.1软件功能模块设计 2.2数据库设计 三.系统项目部分截图 3.1管理员功能模块 3.2热搜数据 3.3 ...

  10. 微博舆情分析系统的设计与实现(python)

    背景分析 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理.由于现在网络的发达,微博 ...

最新文章

  1. 深入探究系统中的输入输出管理
  2. 您对TOP Server的德语、中文和日语语言支持了解吗?(二)
  3. STM32F0 定时器触发ADC,多通道采样、DMA传输数据的配置
  4. ajax不能设置哪些header
  5. datareader对象转化为int_【Angew. Chem. Int. Ed.】光催化丙二烯的去消旋反应
  6. Microsoft Office 2010 Service Pack 2
  7. EF6 Codefirst+MySql 数据库迁移
  8. cent os7 安装nginx1.16.1
  9. Umbraco中的Examine Search功能讲解
  10. Loadrunner11破解
  11. 【Latex】模板设置及使用教程
  12. Nodejs 批量检测 Excel 中url链接是否可访问
  13. web前端入门学习路线{HTML+CSS+JavaScript}最全面的前端教程
  14. cad图文档管理系统,图文档查找困难解决方法
  15. 计算机组成原理---输入输出设备
  16. Android Binder机制学习总结(二)-Driver部分
  17. 点分治+CDQ分治+整体二分全纪录
  18. Spring中IOC容器
  19. 3D打印入门必读工具书《解析3D打印机》免费下载!
  20. 【vba】按比例拆分单元格

热门文章

  1. matlab堆积式玫瑰图,[转帖]堆积式南丁格尔玫瑰图模板
  2. Flutter Web开发 浏览器运行
  3. 初中英语多词性单词怎么办_初中英语词性的分类及用法
  4. 微信小程序JavaScript语法介绍
  5. 全国省市区java_Jsoup获取全国地区数据(省市县镇村)
  6. win10系统禁用音频服务器,Win10下怎样设置禁用扬声器、插入耳机有声音【图文教程】...
  7. 平均数 中位数 四分位数 方差 标准差
  8. Linux文件与管理(还是多记)
  9. 淘宝返利是怎么回事?是真的还是假的?
  10. Java实现斗地主发牌