爬取微博评论并处理为绘制情感分布地图

直接上代码:

#coding=utf-8
from weibopy import WeiboOauth2,WeiboClient
import webbrowser
import time
import re
from collections import defaultdict
import snownlp
from pyecharts.charts import Map
import echarts_china_provinces_pypkg
import echarts_countries_pypkg

client_key='639887680'
client_secret='fe072eade69680cbdfd8e7b1801ab22f'
redirect_url='https://api.weibo.com/oauth2/default.html'
auth=WeiboOauth2(client_key,client_secret,redirect_url)
webbrowser.open_new(auth.authorize_url)


code=input('输入code\n')
token=auth.auth_access(code)
print(token)
print("\n\n")
client=WeiboClient(token['access_token'])
result=client.get(suffix='comments/show.json',params={'id':111680,'count':100,'page':1})
print(result)
province_list = defaultdict(list) # 保存按省划分的评论正文
comment_text_list = [] # 保存所有评论正文

# 获取「自杀式单身」评论列表
# 共获取 10 页 * 每页最多 200 条评论
for i in range(1, 11):
    result = client.get(suffix='comments/show.json', params={'id': 4322140368509204, 'count': 200, 'page': i})

    comments = result['comments']
    if not len(comments):
        break

    for comment in comments:
        text = re.sub('回复.*?:', '', str(comment['text']))
        province = comment['user']['province']
        province_list[province].append(text)
        comment_text_list.append(text)

    print('已抓取评论 {} 条'.format(len(comment_text_list)))
    time.sleep(1)

    provinces={}
    results=client.get(suffix='common/get_province.json',params={'country':'001'})
    for prov in results:
        for code,name in prov.items():
            provinces[code]=name
    print(provinces)



    # 评论情感分析
    positives={}
    for province_code,comments in province_list.items():
        sentiment_list=[]
        for text in comments:
            s=snownlp.SnowNLP(text)
            sentiment_list.append(s.sentiments)
        # 统计平均情感
        positive_number=sum(sentiment_list)
        positive=positive_number/len(sentiment_list)*100

        # 按省保存数据, 0010 为国家前缀
        province_code='0010'+str(province_code)
        if province_code in provinces:
            provice_name=provinces[province_code]
            positives[provice_name]=int(positive)

    # 绘制情感分布图
    keys=list(positives.keys())
    values=list(positives.values())
    map1=Map("自杀式单身 情感分析地域图",width=1200,height=600)
    map1.add("积极情感",keys,values,visual_range=[0,100],maptype='china',is_visualmap=True,is_label_show=True,
            visual_text_color='#000')
    map1.render(path="单身热评分布.html")

在这里插入图片描述
总结一下出来的两个错误及解决办法:

TypeError: __init__() got an unexpected keyword argument 'width'

是版本问题

pip install pyecharts==0.1.9.4

第二个错误也和上面第一个错误有关,

在这里插入图片描述
有两种办法,一种维持此版本即
from pyecharts import Map改为from pyecharts.charts import Map
另外一种办法就是把版本换为老版本即上面的第二种办法(极力推荐)。
参考:
老版本的pyecharts文档
新版本pyecharts文档
pyecharts源码地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值