Python 微博画像分析

      写这篇文章的思路来自于这样的一盘文章:《程序员的七夕应该这么过》。 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请求,双击其中一条请求,我们可以查看这条请求的详细信息如下:


        通过这个链接可以提取出如下关键字:
         uid=1192515960
         luicode=10000011
         type=uid
         value=1192515960
     
      且不管这些关键字的具体含义是什么,这些字段在接下来的爬取过程中将会用到。

      再来分析请求的返回结果, 返回数据是一个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 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( "\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 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’,
     ##添加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的中文乱码解决等等等,这些都是在实际开发中的经验。
         
        所以啊,生命在于折腾啊。
        不过,七夕都过了,我这要为谁做画像呢??难过一秒钟。










                           
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值