失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 文章马伊琍离婚后微博评论太多了...用代码来解决吧

文章马伊琍离婚后微博评论太多了...用代码来解决吧

时间:2020-11-11 20:25:20

相关推荐

文章马伊琍离婚后微博评论太多了...用代码来解决吧

上周末文章同学的一条微博:“吾愛伊琍,同行半路,一别两宽,餘生漫漫,依然親情守候.

紧接着马伊琍的一条微博:“你我深爱过,努力过,彼此成就过。此情有憾,然无对错。往后,各生欢喜.

两人正式通过微博宣布离婚,结束了的婚姻。微博一出,迅速引来大批吃瓜群众。

文章之前说过:这辈子最大的骄傲就是娶了马伊琍,,,微博评论里面也炸开了锅…

so 本篇文章将爬取微博里面的评论,保存到 excel,然后做成词云图。

吃瓜嘛,越大越好,不能少了另一个主角,所以我还爬取了姚笛最新一条微博的评论,果然里面吃瓜群众还是很多滴!

页面分析

拿文章同学的微博来做分析

微博地址

-08-02_173241.png

没有加密,美滋滋呀,已经很久没碰到这么友好的网站了。

再看一下翻页的参数,

参数有点多呀…不过最主要的是 page 这个参数

so 我们直接在第一次请求的参数里面直接加上 page 这个参数,尝试一下,说不定有惊喜…

有数据,哈哈哈。所以其他参数都无关紧要不影响,另外注意将浏览器的 cookie 复制到请求头中,因为微博会对 cookie 作验证。

代码

分析完之后,就可以正式开始码代码了。

不多说了,比较简单,直接帖代码吧

headers={"User-Agent":"Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.142Safari/537.36","Cookie":"",}defget_comment(self,num):url="/aj/v6/comment/big"result_list=[]print(f"{num}start")forpageinrange(1,WeiBo.pages.value):params={"ajwvr":"6","id":num,"from":"singleWeiBo","__rnd":int(time.time()*1000),"page":page}response=requests.get(url,headers=self.headers,params=params)json_data=response.json()ifjson_data["code"]=="100000":html=json_data["data"]["html"]selector=Selector(text=html)ul_list=selector.css(".WB_text")forainul_list:#用户iduser_id=a.css("a::attr(usercard)").extract_first("").replace("id=","")#评论comment=''.join(a.xpath("./text()").extract()).strip().replace(":","")ifcomment=="等人"or"回复:"incomment:continueifcomment:result_list.append(comment.strip())print(f"{num}:正在爬取第{page}页")time.sleep(2)returnresult_list

因为微博有 ip 反爬,所以加了一点延时,评论的页数和微博 id 写到配置文件中了,方便修改

下面是爬虫调度的和数据存储的代码

defwrite_csv(self):writer=pd.ExcelWriter('result.xls')withThreadPoolExecutor(max_workers=3)ast:task1=t.submit(self.get_comment,WeiBo.ma_yi_li.value)task2=t.submit(self.get_comment,WeiBo.wen_zhang.value)task3=t.submit(self.get_comment,WeiBo.yao_di.value)ma_yi_li=task1.result()wen_zhang=task2.result()yao_di=task3.result()p1=pd.DataFrame(data={"ma_yi_li_dict":ma_yi_li},columns=["ma_yi_li_dict"])p2=pd.DataFrame(data={"wen_zhang_dict":wen_zhang},columns=["wen_zhang_dict"])p3=pd.DataFrame(data={"yao_di_dict":yao_di},columns=["yao_di_dict"])p1.to_excel(writer,sheet_name="ma_yi_li")p3.to_excel(writer,sheet_name="yao_di")p2.to_excel(writer,sheet_name="wen_zhang")writer.save()writer.close()

时间关系,代码就不那么讲究了,最后爬下来的结果如下:

文章
姚笛
马伊琍

数据都在同一个 excel 不同的 sheet 里面,因为为了赶时间只爬了 100 页,总共 3000 多条评论。

词云图

数据都有了,词云图就很好搞了,基于 WordCloud 模块

直接上代码:

@staticmethoddefread_csv():path=os.getcwd()img=Image.open(path+r'\1.jpg')#打开图片img_array=np.array(img)#将图片装换为数组fornamein["ma_yi_li","yao_di","wen_zhang"]:d=pd.read_excel("result.xls",sheet_name=name,usecols=[1])df_copy=d.copy()df_copy[name]=df_copy['{}_dict'.format(name)].apply(lambdax:x)df_list=df_copy.values.tolist()comment=jieba.cut(str(df_list),cut_all=False)words=''.join(comment)stop_word={'xa0'}wc=WordCloud(scale=4,width=2000,height=1800,background_color='white',font_path="simfang.ttf",stopwords=stop_word,contour_width=3,mask=img_array)wc.generate(words)wc.to_file('{}.png'.format(name))

注意,WordCloud 这里有个坑,中文的词云图需要指定 font_path 字体,而这个字体是本机中的字体格式

具体格式内容,请自行参考下图寻找

词云图的背景用的是最近很火热的哪吒!

运行之后耐心等待,会在本地生成三张图片,结果如下:

姚笛在中间的位置,嗯…

本来这篇文章以为只要花一点点时间就能完成的,没想到最后还是拖拖拖了将近两个小时,加班才完成的…

看到这还不帮我点个赞吗!

后台回复【"文章"】获取源代码

如果觉得《文章马伊琍离婚后微博评论太多了...用代码来解决吧》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。