
很多人都是在朋友圈装死,微博上蹦迪 。微信朋友圈已经不是一个可以随意发表心情的地方了,微博才是!
所以你不要傻傻盯着女神的朋友圈发呆啦!本文教你如何用 Python 自动通知女神微博情绪变化,从今天开始做一个贴心小棉袄 。
为了及时获取这些消息,三步可以实现:
1、定时自动爬取微博内容2、微博内容的情绪分析3、邮件自动提醒
一、微 博 内 容 获 取
首先是一些常规操作:你需要注册一个微博账户,找到你微博账户的 Cookie
然后找到你需要关注的微博用户的 id,下面以李荣浩为例:
image
或者直接去用户主页查看,进入指定用户主页 , 如李荣浩的主页:https://m.weibo.cn/u/1739046981?uid=1739046981&luicode=10000011&lfid=231093_-_selffollowed其中 1739046981 就是 uid 。先根据这些信息设置好自己的账号,由于最新的微博内容肯定在第一页,设置好首页微博内容的 url
改成自己的user_id和cookieuser_id = YOUR_IDcookie = {"Cookie":"YOUR_COOKIE"}urlurl = http://weibo.cn/%d/profile?page=1\user_id获取初始url页面html内容,获取user_id和cookie(在返回的response header中)html = requests.get(url, cookies = cookie).contentprint (user_id和cookie读入成功)有了这些信息以后 , 我们就可以爬取微博内容啦,这里需要注意的是我们需要加一个第一条微博的判断 。根据用户uid获取该用户第一页的微博消息page_num =1nickname =Noneweibo =Nonetry:json = r.get((https://m.weibo.cn/api/container/getIndex?is_search[]=0&visible[]=0&is_all[]=1&is_tag[]=0&profile_ftype[]=1&page={0}&jumpfrom=weibocom&sudaref=weibo.com&type=uid&value=https://www.45baike.com/post/{1}&containerid=107603{1}).format(page_num, uid),verify=False,).json()except:returnNone,Noneifjson[ok] ==0:print(sth wrong)returnNone,Noneelse:forcardinjson[cards]:ifcard[card_type] ==9:weibo = [card[mblog][created_at],BeautifulSoup(card[mblog][text],lxml).text.replace(???,),*get_comments_from_one_weibo(card[mblog][id]),]这样的话我们就可以获取到女神的最新微博啦~下面要做的就是根据获取到的微博数据来分析情感内容 。二、微 博 内 容 情 感
这部分仅对文本内容有效 , 如果是图片内容就直接通知你内容不做情感分析 。如果需要计算中文文本内容的情绪分,主要是三步:
1、情感字典及对应的分数
浏览器的地址栏里可以调试简短的HTML代码 。方法如下: 地址栏写 about :abc 回车,就看到效果了.108.Windows快捷键:win m 显示桌面win pause 系统属性快速重新启动:按确定前先按shift(不适用于2k、xp).彻底删除:shift del不让光盘自动运行:按shiftCtrl Esc:相当于开始或WIN键Ctrl Home:将游标移至文字编辑区的开始始(Home单用:移至列首)Ctrl End:将光标移至文字编辑区的终点(End单用:移至列尾)Alt F4:关闭当前视窗(若是点一下桌面再按则为关机)
2、数据的分词处理
3、构建情绪分计算逻辑
车钥匙可以重新配吗?车钥匙丢了多少钱配车钥匙丢了可以配,配汽车钥匙是没有具体定价的,需要看车型而定 。目前汽车钥匙分两种,一种是机械钥匙 , 另一种是遥控钥匙 。
这里主要介绍一下情绪分的计算逻辑,情感词典和完整的实现逻辑后台回复「微博通知」获?。?下次再专门写一篇针对文本情绪评分的内容 。
【大连理工情感词汇本体库 情感词汇本体库】简化的情感分数计算逻辑:所有情感词语组的分数之和
定义一个情感词语组:两情感词之间的所有否定词和程度副词与这两情感词中的后一情感词构成一个情感词组 , 即 notWordsdegreeWordssentiWords,例如不是很开心,其中不是为否定词,很为程度副词,开心为情感词,那么这个情感词语组的分数为:finalSentiScore = (-1) ^ 1 * 1.25 * 3.546其中1指的是一个否定词 , 1.25 是程度副词的数值,3.546 是开心的情感分数 。伪代码如下:finalSentiScore = (-1) ^ (num of notWords) * degreeNum * sentiScorefinalScore = sum(finalSentiScore)具体实现逻辑如下:
defscoreSent(senWord, notWord, degreeWord, segResult):W=1score=0存所有情感词的位置的列表senLoc=senWord.keys()notLoc=notWord.keys()degreeLoc=degreeWord.keys()senloc=-1notloc = -1degreeloc = -1遍历句中所有单词segResult,i为单词绝对位置fori in range(0, len(segResult)):如果该词为情感词ifi in senLoc:loc为情感词位置列表的序号senloc = 1直接添加该情感词分数score = W * float(senWord[i])print "score = %f" % scoreifsenloc < len(senLoc) - 1:判断该情感词与下一情感词之间是否有否定词或程度副词j为绝对位置forj in range(senLoc[senloc], senLoc[senloc1]):如果有否定词ifj in notLoc:W*= -1如果有程度副词elifj in degreeLoc:W*= float(degreeWord[j])i定位至下一个情感词ifsenloc < len(senLoc) - 1:i=senLoc[senloc1]returnscore通过这个计算逻辑最终输出整条微博的情绪评分,在做这个最重要的是要有好用的语料库,定义好正向情感词和负向情感词 。基础情感词典已经有整理好了的情感词典 。使用的是大连理工大学的情感词汇本体库,停用词表使用哈工大的停用词表 。
三、邮 件 自 动 提 醒
当我们获取到新的微博内容时 , 就需要将消息推送到我们的邮箱,这时候 , 我们需要添加判定条件,判断是否执行邮件提醒 。这个判断条件与爬取最新微博的判断设置成一致 。python 发邮件需要掌握两个模块的用法,smtplib 和 email,这俩模块是 python 自带的,只需 import 即可使用 。smtplib 模块主要负责发送邮件,email 模块主要负责构造邮件 。smtplib 模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容) 。email 模块主要负责构造邮件:指的是邮箱页面显示的一些构造 , 如发件人,收件人,主题 , 正文,附件等 。导入我们需要用到的包
from email.mime.textimportMIMETextfrom email.mime.multipartimportMIMEMultipartfrom email.mime.imageimportMIMEImageimportsmtplibmsg =MIMEMultipart()在邮件中插入微博正文,同时将情绪分值添加到邮件正文里:在邮件中插入文本信息df_text="Hi!\n你的女神新发了一条微博,情绪分值只有 %s\n快去看看吧!"% scoremsgtext = MIMEText(df_text,plain,utf-8)msg.attach(msgtext)剩下的就是设置一些邮件参数来发送邮件:Python学习群592539176设置邮件信息常量email_host=服务器地址sender=发件人password=密码,如果是授权码就填授权码receiver=收件人发送邮件:try:smtp = smtplib.SMTP(host=email_host)smtp.connect(email_host,port)smtp.starttls()smtp.login(sender, password)smtp.sendmail(sender, receiver.split(,) , msg.as_string())smtp.quit()print(发送成功)exceptException:print(发送失败)具体邮件发送参数说明如下:smtplib.SMTP():实例化SMTP()connect(host,port):email_host:指定连接的邮箱服务器 。常用邮箱的smtp服务器地址如下:新浪邮箱:smtp.sina.com163网易邮箱:smtp.163.com 。port:指定连接服务器的端口号,默认为25login(user,password):sender:登录邮箱的用户名 。password:登录邮箱的密码(网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码 , 该授权码即为客户端密码)sendmail(from_addr,to_addrs,msg,…):sender:邮件发送者地址receiver:邮件接收者地址msg:邮件内容quit():用于结束SMTP会话四、效 果 展 示运行程序结果如下:
你get到了吗~
别让眼睛老去:一夜之间,一场雷电引发的山火烧毁了美丽的森林庄园 , 刚刚从祖父那里继承了这座庄园的保罗迪克陷入了一筹莫展的境地 。他经受不起打击,闭门不出 , 茶饭不思,眼睛熬出了血丝 。一个多月过去了,年已古稀的外祖母获悉此事 , 意味深长地对保罗说:小伙子,庄园成...
猜你喜欢
- 伤感的情感语录短句 情感语录短文
- 老师对学生的情感词语 对老师的情感词语
- 最近最火的心情句子 最近很火的情感句子
- 唯美情感语录短文 情感语录短文
- 关于情感的词语四字 情感的词语2个字
- 形容孩子对老师的情感词语 对老师的情感词语
- 表达情感的4字词语 情感的词语2个字
- 臭美最近很火的句子 最近很火的情感句子
- 最火情感文案句子 最近很火的情感句子
- 情感词汇有哪些两个字 情感词汇有哪些
