民主湖-大数据(1)-------------------你最喜欢哪个版块

本文根据点击打开链接 进行修改而成。在爬虫爬民主湖 中,仅仅是记录了想要查询作者的帖子,并未对帖子的分布做统计。本文将实现作者在每个版块发帖数量的统计。这个实现上非常简单,首先我们建立一个字典变量用来存储每个版块所含该作者帖子的数量,并初始化为0.

AirticleNumeber={280:0,119:0,14:0,27:0,63:0,17:0,
              109:0,83:0,123:0,107:0,30:0,181:0,
             18:0,92:0,195:0,100:0,
             #234:0,
             #103:0,
             #138:0
             #203:0,218:0,180:0
             } 

该字典的索引与民主湖版块ID相对应。

接下来就在每次查询到作者帖子的时候,在相应版块计数上加一。下面代码中这句 AirticleNumeber[Fid]=AirticleNumeber[Fid]+1实现了该功能

def GetAuthorArticleAndReplyContent(urlshort,authourId,belongTopic,Fidname,pagenumber,Fid):
    #在当前页面查找与输入作者ID相关的帖子并记录下来,一个帖子下面所有的
    #belongtTopic:为当前页面的主题帖
    urlstr='http://www.cqumzh.cn/bbs/'+urlshort;
    request = urllib2.Request(urlstr)
    request.add_header('User-Agent', 'fake-client')
    response = urllib2.urlopen(request)
    myPage =response.read()
    #print myPage
         #匹配目标内容
    myItems=re.findall('<a href="space.php\?uid=(\d*)" target="_blank">(.*?)<td class="postauthor".*?</td>',myPage,re.S)
    for item in myItems:
        if item[0]==str(authourId): #找到相同的作者,提前作者的内容,
            st=item[1]
            fItems=re.findall('<table cellspacing="0" cellpadding="0">(.*?)</table>',st,re.S);
            #fItems=re.findall('[\u4e00-\u9fa5]',st,re.S);
            print belongTopic+u'-----回复内容'
            print fItems[0];    
            if mutex.acquire(1): 
                    AirticleNumeber[Fid]=AirticleNumeber[Fid]+1;
                    f.writelines('***************************************************************************************************\n\r')
                    f.writelines(str(Fidname)+u',第'+str(pagenumber)+u'页,'+str(belongTopic)+u',中发表或回复了,\n\r'+str(urlstr)+'\n\r'+fItems[0]+'\n\r')
                    mutex.release()

当遍历完论坛后那么该作者每个版块所发帖子个数便知道了。下面是某作者的各个模块的数量。

接下来我们采用Matplotlib模块将该数据可视化。首先将字典数据放入向量中

 Y=np.zeros(len(AirticleNumeber))
    X=range(len(AirticleNumeber))
    i=0;
    for key in AirticleNumeber:
        Y[i]=AirticleNumeber[key]
        X[i]=FidList[key]
        i=i+1


其中X是模块编号,Y是模块所包含帖子数量。有了X,Y便可以画图显示了。

    subplots_adjust(bottom=0.2,top=0.9);
    plt.bar(arange(len(AirticleNumeber)),Y)
    plt.xticks(arange(len(AirticleNumeber)),X,fontproperties=font,rotation='vertical')
    plt.title(u'各模块帖子个数分布图',fontproperties=font)
    plt.ylabel(u'帖子数量',fontproperties=font)
    plt.savefig('Cid'+str(authorId)+'.jpeg',dpi=500)


其中还遇到了个问题,就是matplotlib中文显示的问题,在网上搜了搜,找了一个可行的方法。

myfont = matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/msyh.ttf')  
mpl.rcParams['axes.unicode_minus'] = False  

接下来就是结果了,我们欣赏一下




从上面两张图上可以看出,第一个比较文艺,主要活跃在江风竹雨,而第二个应该是吃过吃货,长期活跃在鱼食天下。好了,大家可以试试自己的活跃板块是哪儿,其它人的活跃板块是哪儿。ENjoy!

对了,代码稍后上传!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值