利用Python爬取微博数据进行数据分析

715 阅读2分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

之前帮前女友做关于女权相关话题论文的数据收集分析,因为以前有做过相关数据分析的经验,就顺手帮忙爬了一下数据,拿mac跑了半天,遂在此记录一下过程,给没有相关经验的朋友一点参考。

一、爬取数据

1、首先得有爬虫代码

这里因为我()不太了解爬虫怎么写。所以借用了GitHub上现成的爬虫项目,具体可以参考:weibo-crawler

  1. 拉下项目代码
  2. pip安装所需依赖
  3. 根据readme文档中的程序设置,填写自己需要的信息(文档中非常的详细)
  4. 执行代码即可
  • 推荐使用json或csv的格式存储就可以了,后续数据分析也比较方便。如果有进一步的数据展示或者数据分析的需求可以使用Mysql等数据库进行存储。

2、读取json数据

读取json文件将微博内容写入txt文件中。

#读取json文件
f = open("e.json",'r',encoding='utf-8')

content = json.loads(f.read())
temp = content['weibo']
str = ''
for item in temp:
    str = str + item['text']
f1=open("poem5.txt", 'a', encoding='utf-8')
f1.write(str+"\n")

二、分析数据

1、使用jieba分词

上个大学选修python课程,除了比较好过之外,记住了这个jiaba分词工具,非常好用。

f1=open("poem5.txt", 'r', encoding='utf-8')
str1=f1.read()

counts={}
# 使用jieba分词
words=jieba.cut(str1)
for word in words:
    if len(word) ==1:
        continue
    else:
        counts[word]=counts.get(word,0)+1
items = list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)

以中国妇女报的微博为例,结果如下,因为没有进行筛选,各种乱七八糟的字符都有,很难看。

Jietu20220207-233849.jpg

2、筛掉非中文单词

使用正则表达式将属于中文的单词保留下来。

#检验是否含有中文字符
def is_contains_chinese(strs):
    for _char in strs:
        if '\u4e00' <= _char <= '\u9fa5':
            return True
    return False

result=''
f2=open("result.txt", 'a', encoding='utf-8')
for i in range(len(items)):
    word,count = items[i]
    cc=str(count)
    if(is_contains_chinese(word)):
        result = result+word+' '+cc+'\n'
f2.write(result)

最终的结果如下,稍微能看得过去。

Jietu20220207-233742.jpg