当前位置: 首页 > 后端技术 > Python

爬取林丹和赵雅琪的微博评论,看看网友怎么说

时间:2023-03-26 19:23:41 Python

7月4日,林丹在微博上宣布退役。不好意思,我们快速浏览一下他们的微博。对于他们的微博内容,这里不作评价。我们用Python爬取他们微博下的评论信息,看看网友们都说了些什么。在抓取爬取之前,我们先简单了解一下微博。微博主要有以下三种展示形式:网页版(http://weibo.com)移动端(http://m.weibo.cn)移动端(http://weibo.cn)其中,在移动端相对容易。这里我们从移动端开始。首先在浏览器输入http://weibo.cn打开,如下图:我们可以看到有一个搜索框,我们可以用它来找人,以林丹为例,之后我们在搜索框中输入林丹,点击找人按钮,我们可以搜索林丹的微博,如下图:我们点击其微博博客名进入微博首页,如下图:然后打开开发者工具选择网络,然后点击评论,如下图:因为评论比较多,需要翻页查看更多内容,我们将翻页下拉,可以看到翻页按钮,我们点下一页看具体请求,如下图:上图中RequestURL中page参数前面是固定的,page是页码,我们需要抓取时使用这是URL。另外,我们还需要用到cookie和user-agent参数,可以在下面的RequestHeaders中找到,如下图:找到所有需要的东西之后,我们就可以抓取Fetchcomments了,主要代码实现如下:#抓取一页评论defget_one_page(url):headers={'User-agent':'MyownUser-agent','Host':'weibo.cn','Accept':'application/json,text/plain,*/*','Accept-Language':'zh-CN,zh;q=0.9','Accept-Encoding':'gzip,deflate,br','Cookie':'OwnCookie','DNT':'1','Connection':'keep-alive'}#获取网页htmlresponse=requests.get(url,headers=headers,verify=False)#响应抓取成功。status_code==200:#返回值为html文档,传入解析函数returnresponse.textreturnNone#解析并保存评论信息defsave_one_page(html):comments=re.findall('(.*?)',html)forcommentincomments[1:]:result=re.sub('<.*?>','',comment)if'reply@'notinresult:withopen('ld_comment.txt','a+',encoding='utf-8')asfp:fp.write(result)最后我们爬取了评论信息,保存在txt文件中词云展示接下来我们将网友的评论看成词云。之前我们做过词云,这里就不多说了。我们看一下主要代码实现:defjieba_():stop_words=[]withopen('stop_words.txt','r',encoding='utf-8')asf:lines=f.readlines()forlineinlines:stop_words.append(line.strip())content=open('ld_comment.txt','rb').read()#jiebaword_list=jieba.cut(content)words=[]forwordinword_list:ifwordnotinstop_words:words.append(word)globalword_cloud#以逗号分隔Wordsword_cloud=','.join(words)defcloud():#打开词云背景图cloud_mask=np.array(Image.open('bg1.png'))#定义词云的一些属性wc=WordCloud(#背景图片分割颜色为白色background_color='white',#背景图案mask=cloud_mask,#显示最大词数max_words=200,#显示中文font_path='./fonts/simhei.ttf',#最大尺寸max_font_size=40)globalword_cloud#词云函数x=wc.generate(word_cloud)#生成词云图像image=x.to_image()#显示词云图像imag电子.show()#保存词云图wc.to_file('ld.png')我们先来看看林丹微博评论生成的词云,如下图:赵雅琪的微博评论,如下图:最后再来看一下林赵所有评论生成的词云图,如下图:源码在下方公众号后台,回复200707即可获得