爬虫:读取数据库数据并处理数据

  测试代码要利用到上一篇文章爬取到的数据,上一章链接:爬虫:多进程爬虫 

    本文要分析上一篇文章爬取到的数据库中的数据,结果分别是与男性/女性话题相关联的话题。

1. 遍历mongodb数据语法

1.1 测试代码

from pymongo import MongoClient

client = MongoClient('localhost')
db = client['zhihu_mirror_links']

collection = db['女性keyword']
results = collection.find({'key_words': {'$regex': '.*'}})
print(results)
for i in results[:10]:
    print(i['key_words'])

 

1.2  测试结果

 2. 数据分析

  下面的截图结果是运行两次代码的结果,每次运行要修改一下所要处理数据库的collection,其余不需要改动

2.1 测试代码

import matplotlib.pyplot as plt
from pylab import mpl
from collections import Counter
from pymongo import MongoClient
import time
import os

client = MongoClient('localhost')
db = client['zhihu_mirror_links']
collection = db['男性keyword']
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
mpl.rcParams['font.size'] = 8                 # 设置标签字体大小
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题


def data_view():
    # 首先读取数据库数据,并进行关键字计数:Counter对象
    topic = input('输入要分析的话题:')   # 保存文件名用到
    keywords = []
    db_results = collection.find({'key_words': {'$regex': '.*'}})  # 读取数mongodb据库数据
    for result in db_results:                                        # 将数据添加到keywords列表
        for word in result['key_words'].split(','):
            keywords.append(word)
    print(Counter(keywords).most_common())
    print(Counter(keywords).most_common()[:30])                       # 列表计数测试
    keywords_count = Counter(keywords).most_common()[1:31]           # 取数量排名前21,去除第一个

    # 遍历文件夹,保证文件夹中没有要保存图片名的图片
    index = 1
    while topic + str(index) + '.png' in os.listdir(r'镜像话题数据分析'):
        index += 1

    # 提取要绘图的纵横坐标数据:x,y
    x = []
    y = []
    for data in keywords_count:                                      # 迭代计数列表
        x.append(data[0])
        y.append(data[1])
    x.reverse()                                       # matplotlib画横向柱状图是从下往上画,反转一下数据
    y.reverse()

    # 画横向柱状图
    fig, ax = plt.subplots()
    png = ax.barh(range(len(x)), y, color='#ff20ff')
    # 添加数据标签
    for rectangle in png:
        width = rectangle.get_width()
        ax.text(width, rectangle.get_y() + rectangle.get_height() / 2, '%d' % int(width), ha='left', va='center')
    # 设置Y轴刻度线标签
    ax.set_yticks(range(len(x)))
    ax.set_yticklabels(x)

    plt.xlabel('value')
    plt.ylabel('keyword')
    plt.title(topic + '话题' + '\n' + time.ctime() + '\n' + str(Counter(keywords).most_common()[0]))  # 排名第一的将在图表标题显示
    plt.savefig(r'镜像话题数据分析' + '/' + topic + str(index) + '.png', dpi=600, bbox_inches='tight')  # 清晰度
    plt.show()  # 要放在savefig后面


if __name__ == '__main__':
    data_view()

2.2 结果截图

     

 

 

3.  结论

  对于生活话题,男性不及女性。

  对于化妆、美容、生育话题,男性不及女性。

  对于情感、心理、婚姻、家庭、性等话题,男性和女性都同样关注。

 

posted @ 2021-05-20 13:52  thoustree  阅读(657)  评论(0编辑  收藏  举报
返回顶部