QQ空间"说说"分析 Python

前两天看见一篇分析豆瓣上对战狼2评论的分析,觉得挺好玩,就有了这篇文章。PS:顺便吐槽一下,本来pthon对中文的支持就不很友好,然后qq好友的昵称……你懂的,在这里把我快逼疯了,一会encode一会deconde,一会gb2312一会utf-8,只有这个时候觉得还是c#人性那么一丢丢~
1. 数据获取
访问qq空间是需要密码的,直接用爬虫还需要很多额外的工作量,这个不是重点,就直接打开qq空间 进到某人的说说下,然后F12吧
2. 数据提取
需要找到要提取的数据的模式,其中包括:说说的内容、发表时间、点赞好友列表、评论和主人回复,最后加一个每一条说说的模式
        self.contentPattern = r'<li class="f-single'#一条说说的模式
        self.titlePattern = r'<div class="f-info">(.|\n)*?</div>'#说说标题,内容
        self.nickNamePattern = r'<div class="user-list">(.|\n)*?</div>'#点赞的好友昵称
        self.visitorMsgPattern = r'<li class="comments-item bor3" data-type="commentroot"(.|\n)*?</li>'#评论的内容
        self.shoushuoTimePattern = r'<span class=" ui-mr8 state">(.|\n)*?</span>'#发说说的时间
其中第一个,用正则表达式出来的结果很不满意,最终用了字符查找来分割的(有点不好看,不过效果还不错)
    def __GetShoushouItem__(self,filePath):
        itemList = []
        contentList = []
        contentFile = open(filePath,'r')
        content = ''
        try:
            content = contentFile.read()
            index = content.find(self.contentPattern,0)
            while index != -1:
                itemList.append(index)
                index = content.find(self.contentPattern,index + 1)
                contentList.append(content[itemList[len(itemList) - 1]:index].decode('utf-8'))
        finally:
            contentFile.close()
        return contentList
用模式提取之后,还是包含了大量的html标签,这个时候就可以用BeautifulSoup了
    #分析标题模块内的内容,返回说说的标题内容
    #titleContent:由titlePattern得到的div内容块
    def __TitlePatternAnalysis__(self,content):
        rePattern = re.search(self.titlePattern,content)
        titleContent = rePattern.group(0) if rePattern != None else ''
        soup = BeautifulSoup(titleContent)
        return soup.get_text()
把感兴趣的内容都如此操作一番后,把得到的数据格式化后就可以提交到下个处理单元啦
3. 数据整理、分析
定义一个一条说说的数据结构:
class ShoushouItem:
    def __inti__(self):
        self.title = ''
        self.nickList = []
        self.nickNum = ''
        self.vistorMsg = {}
        self.shoushouTime = ''
然后分析这个结构的列表就ok了
比如哪个好友给你点赞最多:
    #每个好友曾经的点赞次数
    def __GetAllNickPraise__(self):
        nickdic = {}
        for item in self.contentList:
            for name in item.nickList:
                if nickdic.get(name) == None:
                    nickdic[name] = 1
                else:
                    nickdic[name] += 1
        return nickdic
把这个字典存成一个有格式的文件
    def CreateUserTable(self):
        paraiseUserDic = self.__GetAllNickPraise__()
        f = open("out.txt","w")
        for key in paraiseUserDic:
            temp = key.encode('utf-8') + ',' + str(paraiseUserDic[key]) + '\r\n'
            f.writelines(temp)
        f.close()

利用在线云图生成工具,把上面的文件导入,点击生成就ok了,点赞次数的好友图有出卖好友的嫌疑就不贴了,只贴一张主人回复的词频图吧



猜你喜欢

转载自blog.csdn.net/qq_36810544/article/details/77920321