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

Python爬取某个博客的评论并生成词云图

时间:2023-03-26 13:42:41 Python

每个人都非常熟悉某个博客,在日常生活中每个人都喜欢它。看看某个博客,看看微博上的实时热点,看看今天发生了什么新鲜事,能吃到什么瓜。今年注定是国产娱乐不平凡的一年。作为一个吃瓜群众,吃完突然觉得“累”了!人家总说不管是各种综艺还是大瓜,我觉得去年10月份开始的各种偶像的崩盘就是极限了。却没想到,这个年初:郑、张、张、华,也算是刷新了倒塌房子的底线。身为“热搜绝缘体”的王老师说:“太难了”。就是不知道汪峰老师下次什么时候会有新进展,又会给我们这些吃瓜群众带来什么样的惊喜。好了,废话不多说了,当热搜出来的时候,吃瓜群众会有什么样的反应呢?今天我们用python爬取热点下的评论,看看吃瓜群众都怎么说的。以这个链接为例:https://m.weibo.cn/detail/4633967301757583通过下图获取爬取链接的cookie值。由于代码中使用的cookie经过处理,可能无法获取到相关Data,请按照下图所示方法获取自己的cookie值进行替换。然后我们切换到NetWork,筛选数据,发现数据是通过接口返回的,很简单。我们只需要构建请求接口需要的数据即可。那么接口需要什么数据呢?请看下图:根据上图的分析,我们可以得到构建接口的参数。至于如何构造参数,我们就不赘述了。接下来,让我们开始编码过程:这是我发现的一个很好的代理。需要平台的可以获取#coding:utf-8#__auth__="maiz"importsysimportrequestsimportrandomimporttimeimportjiebafromwordcloudimportWordCloudimportmatplotlib.pyplotaspltimportreclassWeibo(object):url='https://m.微博。cn/comments/hotflow?'#评论主链url_chi='https://m.weibo.cn/comments/hotFlowChild?'#子评论主链user_agent=["Mozilla/5.0(Macintosh;U;IntelMacOSX10_6_8;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50","Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50","Mozilla/5.0(WindowsNT10.0;WOW64;rv:38.0)Gecko/20100101Firefox/38.0","Mozilla/5.0(WindowsNT10.0;WOW64;Trident/7.0;.NET4.0C;.NET4.0E;.NETCLR2.0.50727;.NETCLR3.0.30729;.NETCLR3.5.30729;InfoPath.3;rv:11.0)likeGecko","Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0)","Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)","Mozilla/4.0(兼容;MSIE7.0;WindowsNT6.0)”,“Mozilla/4.0(兼容;MSIE6.0;WindowsNT5.1)”,“Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1","Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1","Opera/9.80(Macintosh;IntelMacOSX10.6.8;U;en)Presto/2.8.131Version/11.11","Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11","Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11","Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Maxthon2.0)","Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1);腾讯旅人4.0)",“Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1)”,“Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1;TheWorld)”,“Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1;Trident)/4.0;SE2.XMetaSr1.0;SE2.XMetaSr1.0;.NETCLR2.0.50727;SE2.XMetaSr1.0)","Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;360SE)","Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;AvantBrowser)","Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1)","UCWEB7.0.2.37/28/999","NOKIA5700/UCWEB7.0.2.37/28/999","Openwave/UCWEB7.0.2.37/28/999","Mozilla/4.0(compatible;MSIE6.0;)Opera/UCWEB7.0.2.37/28/999","Mozilla/6.0(iPhone;CPUiPhoneOS8_0likeMacOSX)AppleWebKit/536.26(KHTML,likeGecko)Version/8.0Mobile/10A5376eSafari/8536.25",]cookies=['_T_WM=543292696212;WEIBOCN_FROM=1110006030;XSRF-令牌=82baa0;登录场景=102003;SUB=_2A25NtanXDeRhGeFI6lQZ8yrKyTyIHXVvWTefrDV6PUJbktB-LUSskW1NfVq9yQwFLX6ZFuL9fmFotKnrlgUo2uf2;SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9Wh2DsSw6p8Yd5p9kFmFfS865JpX5KzhUgL.FoMceKqRe0Bceo52dJLoIp7LxKML1KBLBKnLxKqL1hnLBoMNSo2c1heXSoz7;SSOLoginState=1622268295;M登录=1;M_WEIBOCN_PARAMS=oid%3D4635613573678655%26lfid%3D102803%26luicode%3D20000174']headers={'User-Agent':random.choice(user_agent),'Cookie':random.choice(cookies)}params={}params_chi={}list_text=[]#存储评论文本data_text={}cid_list=[]date_list=[]defget_max_id(self):try:try:response=requests.get(url=self.url,headers=self.headers,params=self.params).json()#下载网页#print(response)except:print('e')response=requests.get(url=self.url,headers=self.headers,params=self.params).json()#刷取网页passmax_id=response['data']['max_id']#获取请求的参数,来自上一页json源码max_id_type=response['data']['max_id_type']data=response['data']['data']#print(len(data))foriinrange(0,len(data)):text=data[i]['text']date=data[i]['created_at']self.data_text[text]=date#将评论日期存储为字典的值,将评论存储为键cid=data[i]['id']#print(text)self.list_text.append(text)self.cid_list.append(cid)#print(self.data_text)except:max_id=self.params['max_id']max_id_type=self.params['max_id_type']print('Error!!!')print('爬到:',max_id,max_id_type)self.save_data()sys.exit()返回max_id,max_id_typedef__init__(self):#num_page=int(input('请输入您要抓取的页面数量:'))#ID=input('请输入您要抓取的内容的id:')num_page=5ID=4633967301757583return_info=('0','0')#给出第一次爬取的页面的初始参数。如果程序中途暂停,可以输入返回值重新爬取foriinrange(0,num_page):print(f'爬取页面{i+1}')time.sleep(random.randint(0,5))#反爬暂停self.params={'id':ID,'mid':ID,'max_id':return_info[0],'max_id_type':return_info[1]}#print("-------------------")#print(self.params)#print("------------------------")return_info=self.get_max_id()print(f'Page{i+1}crawledcomplete')self.save_data()defsave_data(self):#为文本保存数据self.data_text:withopen('weibo_10_9.txt','a',encoding='utf-8')asf:f.write('\n')date=self.data_text[文本]#print(date)f.write(text)f.write('\t')f.write(date)f.write('\n')f.write('\n')m=Weibo()#导入文本数据并进行简单的文本处理#去掉换行和空格text=open("weibo_10_9.txt",encoding='utf8').read()pattern=re.compile(r'[^\u4e00-\u9fa5|\n]')#\u4e00-\u9fa5代表所有汉字,\n代表一个换行符这个匹配所有非中文和非换行符text=re.sub(pattern,'',text)text=text.replace('\n',"")#分词,返回结果为单词列表=结巴。lcut(text)#将分割后的词用某种符号分开,连接成一个字符串,encoding="utf8").read().split("\n")#使用WordCloud生成词云word_cloud=WordCloud(scale=12,font_path=r"C:\Windows\Fonts\simhei.ttf",#设置词云字体background_color="white",#词云图的背景色stopwords=stop_words#去除停用词)wc=word_cloud.generate(text_cut)#使用matplotlib显示结果plt.subplots(figsize=(12,8))plt.imshow(wc)plt.axis("off")plt.show()plt.savefig('ci.png')右键运行代码,一个关于注释的txt文件可以在当前文件夹中生成,根据txt中的内容生成词云图。代码得到回复:“从某个博客抓取评论”。以上就是我今天要和大家分享的内容。