用python写脚本筛选原创微博_用python生成微博词云

背景

数据分析是个好玩又有意义的事情,作为微博资深用户,通过词云来分析这些年自己到底写了些啥,从旁观者角度认识自己,想想都好玩,同时学习数据分析。

前提

需要爬取微博数据,在这之情弄清楚是否合法。因为爬取自己微博数据,只是学习使用,无商业目的,善意的爬虫,应该可以。

进入正题

1.工具&库

python3.7

引用python库:

jieba:python的中文分词组件,pip或者conda安装。三种分词模式:精确模式,试图将句子最精确地切开,适合文本分析;

全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

缺点:对歧义词和停用词无法区分,可构造自定义词库规避该缺点。

imread:读取图片数据函数。很多词云案例中,给出的是从scipy中引入,但scipy官方最新版已经取消该函数的使用,若安装的最新版scipy,基本会报错。改用从imageio引入可解决,from imageio import imread。

matplotlib:python画图库

wordcloud:词云库

requests:Python HTTP 库

2.脚本步骤

步骤1:抓取微博数据使用chrome浏览器,打开微博移动端网址https://m.weibo.cn/,并打开浏览器调试功能,查看获取个人用户下的微博状态列表url,request和response。

其中API为:https://m.weibo.cn/api/container/getIndex,uid和containerid是与账户相关的query parameter,可写成抓取微博数据函数的入参。

获取目标:response中每条数据的mblog.text,该内容为微博发布内容,获取后存入txt文件,供生成词云使用。

url = "https://m.weibo.cn/api/container/getIndex"

params = {"uid": "{uid}",

"luicode": "20000174",

"featurecode": "20000320",

"type": "uid",

"value": "1705822647",

"containerid": "{containerid}",

"page": "{page}"}

def fetch_data(uid=None, container_id=None):

"""抓取数据,并保存到txt文件"""

page = 0

total = 660 #抓取的微博条数,可自定义

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("data").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))

步骤2:生成词云图将爬取的文本内容存入文本后,进入生成词云步骤

该步骤未做复杂处理,利用jieba分词功能进行分词,未做歧义和停用词处理

分词完毕后,用WordCloud生成词云

用matplotlib画出词云图

def generate_image():

data = []

jieba.analyse.set_stop_words("./stopwords.txt")

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('111.jpeg')

wordcloud = WordCloud(

font_path='/Library/Fonts/Songti.ttc',

background_color='white',

max_words=100,

mask=mask_img

).generate(data)

plt.title(u"word cloud")

plt.imshow(wordcloud.recolor(color_func=grey_color_func, random_state=3),

interpolation="bilinear")

plt.imshow(wordcloud, interpolation="bilinear")

plt.axis("off")

plt.savefig('./myblog.jpg', dpi=1600)

plt.show()

运行结果

从自己微博的词云图,可以看出,我的微博真的是日常感想抒发地,多感觉词语,描述词语,而且每次旅行的时候更爱发微博,旅行地点基本都被记录了

参考资料:Python 任意中文文本生成词云 最终版本​blog.csdn.netPython爬取微博数据生成词云图片​blog.csdn.net

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值