龙空技术网

详解使用Python爬取豆瓣短评并绘制词云

用户95877765594 59

前言:

此时你们对“python生成词云某个词越多字越大按照逗号确定词”大致比较重视,我们都想要分析一些“python生成词云某个词越多字越大按照逗号确定词”的相关知识。那么小编在网摘上网罗了一些对于“python生成词云某个词越多字越大按照逗号确定词””的相关内容,希望小伙伴们能喜欢,姐妹们一起来学习一下吧!

成果如下(比较丑,凑合看)

1.分析网页

打开想要爬取的电影,比如《找到你》,其短评如下:

查看源代码

发现短评存放在<span>标签里 并且class为short,所以通过爬取其里边的内容即可

并且通过翻页发现:url改变的仅仅为start,每次翻页增加20,所以只需for循环增加数字即可控制页数

2.获取其网页内容

我们使用bs4以及requests模块进行获取,并使用多线程加快爬取速度

import threadingimport requestsfrom bs4 import BeautifulSoup'''遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!'''# # 1). 爬取某一页的评论信息;def getOnePageComment(id, pageNum): # 1). 根据页数确定start变量的值 # 第一页: ;limit=20&sort=new_score&status=P # 第二页: ;limit=20&sort=new_score&status=P # 第三页: ;limit=40&sort=new_score&status=P start = (pageNum-1)*20 url = ";limit=20&sort=new_score&status=P" %(id, start) # 2). 爬取评论信息的网页内容 content = requests.get(url).text # 3). 通过bs4分析网页 soup = BeautifulSoup(content, 'lxml') # 分析网页得知, 所有的评论信息都是在span标签, 并且class为short; commentsList = soup.find_all('span', class_='short') pageComments = "" # 依次遍历每一个span标签, 获取标签里面的评论信息, 并将所有的评论信息存储到pageComments变量中; for commentTag in commentsList: pageComments += commentTag.text # return pageComments print("%s page" %(pageNum)) global comments comments += pageComments# 2).爬取某个电影的前10页评论信息;id = '27140071'comments = ''threads = []# 爬取前10页的评论信息;获取前几页就循环几次;for pageNum in range(10): # 0 , 1 2 3 4...9 pageNum = pageNum + 1 # getOnePageComment(id, pageNum) # 通过启动多线程获取每页评论信息 t = threading.Thread(target=getOnePageComment, args=(id, pageNum)) threads.append(t) t.start()# 等待所有的子线程执行结束, 再执行主线程内容;_ = [thread.join() for thread in threads]print("执行结束")with open("%s.txt" %(id), 'w') as f: f.write(comments)

成果如下

3.数据清洗

对于爬取的评论信息进行数据清洗(删除不必要的逗号, 句号, 表情, 只留下中文或者英文内容)

在此使用re模块使用正则表达式进行数据清洗

with open('找到你.txt','a+') as f: comments = f.read() print(comments) # 通过正则表达式实现 pattern = re.compile(r'([\u4e00-\u9fa5]+|[a-zA-Z]+)') deal_comments = re.findall(pattern, comments) newComments = '' print(newComments) for item in deal_comments: newComments += item print(newComments) f.write(newComments)

4.制作词云

通过jiaba(通过词库切割中文)、wordcloud(制作词云)模块实现

import jiebaimport wordcloudimport numpy as np# 在python2中处理图像,Image; python3中如果处理图像, 千万不要安装Image, 安装pillowfrom PIL import Image# 1). 切割中文, lcut返回一个列表, cut返回一个生成器;result = jieba.lcut(open('找到你.txt').read())# 2). 打开图片imageObj = Image.open('./doc/mao.jpg')cloud_mask = np.array(imageObj)# 4). 绘制词云wc = wordcloud.WordCloud( mask = cloud_mask, background_color='black', font_path='./font/msyh.ttf', # 处理中文数据时 min_font_size=5, # 图片中最小字体大小; max_font_size=50, # 图片中最大字体大小; width=500, # 指定生成图片的宽度)wc.generate(",".join(result))wc.to_file('找到你.png')

(效果如图,背景大家可以找点自己喜欢的)

标签: #python生成词云某个词越多字越大按照逗号确定词