爬取豆瓣《小丑》短评做词云图
一、抓取小丑的豆瓣短评
网址:https://movie.douban.com/subject/27119724/reviews?start=20
首先构造url,短评页面每页可以抓取20个评论,假如我们需要抓取第20-40个评论,我们便可以构造url:https://movie.douban.com/subject/27119724/reviews?start=40,
以此类推我们可以抓取前3060个评论:
分别抓取了评论用户的名称、短评的内容,点赞数目以及用户链接
抓取内容保存为文本格式,
代码如下:
import csv
import requests
from lxml import etreeclass douban(object):def __init__(self,headers):self.url='https://movie.douban.com/subject/27119724/reviews?start={page}'self.headers=headerspassdef get_html(self,url):response=requests.get(url,headers=headers)html=etree.HTML(response.text)return htmldef get_comments(self,html):short_comments=html.xpath('//h2/a/text()')#短评return short_commentsdef get_names(self,html):names=html.xpath('//header/a[@class="name"]/text()')#用户姓名return namesdef get_thumbs(self,html):thumb_ups=html.xpath('//div[@class="action"]/a[@title="有用"]/span/text()')#点赞情况return thumb_upsdef get_userifo(self,html):name_urls=html.xpath('//header/a[@class="name"]/@href')#用户链接return name_urlsdef save_csv(self,d):with open('D:/douban.csv','a',encoding='utf-8',newline='') as f:writer=csv.writer(f)writer.writerow([d['名字'],d['评论'],d['点赞数目'],d['用户链接']])def save_txt(self,d):with open('D:/douban.txt','a',encoding='utf-8') as f:f.write(d['名字']+';'+d['评论']+';'+d['点赞数目']+';'+d['用户链接']+'\n')def main(self):for page in range(0,3041,20):url=self.url.format(page=page)print('开始爬取'+url)html=self.get_html(url)short_comments=self.get_comments(html)names=self.get_names(html)thumb_ups=self.get_thumbs(html)name_urls=self.get_userifo(html)d={'评论':short_comments,'名字':names,'点赞数目':thumb_ups,'用户链接':name_urls}for i in range(len(names)):d={}d={'评论':short_comments[i],'名字':names[i],'点赞数目':thumb_ups[i].strip('\n').strip(),'用户链接':name_urls[i]}self.save_txt(d)if __name__=='__main__':douban=douban(headers)douban.main()
用pandas进行读取后如下所示:
import pandas as pd
table=pd.read_table('D:/douban.txt',sep=';')
table.columns=['用户名','短评内容','点赞数目','用户链接']
table
二、对短评内容做词云图
1.制作停止词库:
因为我们在评论时会有很多的语气词、副词·等,对于我们展现词频热度是无意义的干扰词。
停止词库是从网上下载下来的,有近2000多个,我还向里面添加了小丑,观后感等词语:
def make_stopdict():stopdict = set()f = open("D:/stopwords.txt","r") #网上下载来的停止词文本,近2000个,可以自己往里面添加lines = f.readlines()for l in lines:stopdict.add(l.strip())f.close()return stopdict
stopdict = make_stopdict()
2.分词:
将一句完整的短评语句分解成一个个词语,我使用的jieba进行分词
import jieba
import rezhongwen_pat = re.compile(r'^[\u4e00-\u9fa5a-zA-Z]+$')#匹配中文、英文等
all_content = []
f = open("D:/douban_terms3.txt","w")
comments=table['短评内容']
for comment in comments: #tweets是从数据库中取出来的待制作词云图的文本源cut_list = [terms for terms in jieba.cut(comment) if zhongwen_pat.search(terms)]cut_set = set(cut_list)res_set = cut_set - stopdictres_list = list(res_set)all_content.extend(res_list)f.writelines(res_list)
f.close
分词之后的短评内容保存在了douban_terms3.txt文件中,格式如下所示:
3.提取关键词
使用的是 jieba.analyse.extract_tags来提取的关键词,关于提取 jieba.analyse.extract_tags的用法可以参照:https://blog.csdn.net/qq_40082282/article/details/103433612
import jieba.analysedef get_top_keywords(file):top_word=[]with open(file,'r') as f:texts=f.read()#读取文件为整个字符串result=jieba.analyse.extract_tags(texts,topK=400,withWeight=True)#保留400个关键字for r in result:top_word.append(r[0])return top_word
top_word=get_top_keywords('D:/douban_terms3.txt')
400个关键词如下所示:
4.绘制词云图
from scipy.misc import imread
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
import matplotlib.pyplot as plt
from os import pathdef draw_wordcloud(txt):#读入一个txt文件,基于此文本知错词云图color_mask = imread("D:/th.jpg") #读取背景图片,cloud = WordCloud(#设置字体,不指定就会出现乱码,文件名不支持中文font_path="D:/FZMiaoWuJW.TTF", #font_path=path.join(d,'simsun.ttc'),#设置背景色,默认为黑,可根据需要自定义为颜色background_color='white', #词云形状,mask=color_mask,#允许最大词汇max_words=400,#最大号字体,如果不指定则为图像高度max_font_size=50,#画布宽度和高度,如果设置了msak则不会生效width=800,height = 600,margin = 2,#词语水平摆放的频率,默认为0.9.即竖直摆放的频率为0.1prefer_horizontal = 0.8)wc = cloud.generate(','.join(top_word)) #产生词云,直接从字符串文本中产生词云图#wc = cloud.fit_words(txt) 跟以上是同一意思wc.to_file("D:/xiaochou_cloud.jpg") #保存图片#显示词云图片plt.imshow(wc)#不显示坐标轴plt.axis('off')#绘制词云#plt.figure(dpi = 600)image_colors = ImageColorGenerator(color_mask)#plt.imshow(wc.recolor(color_func=image_colors)) #重新上色,plt.show()
draw_wordcloud(top_word)
最后产生的词云图如下所示:
总结:做词云图共分四步:制作停止词库、分词、提取关键词、绘制词云图;基本用wordcloud和jieba就可以搞定。
爬取豆瓣《小丑》短评做词云图相关推荐
- python爬取豆瓣影评生成词云的课程设计报告_Python爬取豆瓣影评,生成词云图,只要简单一步即可实现。...
最近看了一部电影<绣春刀>,里面的剧情感觉还不错,本文爬取的是绣春刀电影的豆瓣影评,1000个用户的短评,共5W多字.用jieba分词,对词语的出现频率进行统计,再通过wordcloud生 ...
- 实例:爬取豆瓣评论、绘制词云图以及情感分析——以《长津湖》为例
一.爬取豆瓣<长津湖>网页评论 (由于存在一定的反爬机制,以下代码最多只能爬取210条评论) # 导入工具包 import requests from bs4 import Beautif ...
- [转载]Python爬取豆瓣影评并生成词云图代码
# -*- coding:utf-8 -*- ''' 抓取豆瓣电影某部电影的评论 这里以<我不是潘金莲为例> 网址链接:https://movie.douban.com/subject/2 ...
- 爬取豆瓣电影短评并使用词云简单分析top50
先使用进程池爬取豆瓣电影短评 import requests import re import random import time import pandas as pd from pymongo ...
- 超细致通用,python爬取豆瓣游戏短评——以王者荣耀评论为例
超细致通用,爬取豆瓣游戏短评--以王者荣耀评论为例 写在前面 一.介绍 二.步骤 1.观察 1.1网页结构 1.2网页层次逻辑 2.准备 2.1引入库 2.2获取html文件并且解析 3.选取 3.1 ...
- python爬虫豆瓣电影短评_【Python爬虫】BeautifulSoup爬取豆瓣电影短评
目的:爬取豆瓣[红海行动]电影的首页短评 步骤: 1.使用BeautifulSoup解析网页 soup = BeautifulSoup(r, 'lxml') // lxml 库解析速度快,也能解析复杂 ...
- csv文件操作和爬虫抓取豆瓣影评并生成词云图
1. csv文件操作 csv文件windows默认是excel打开的,是一种表格式文件 import csv #导入csv的库 # 一次写入多行文本时,会多换一行,可以设置newline=" ...
- Python 爬虫实例+爬取豆瓣小组 + wordcloud 制作词云图
目标 利用PYTHON爬取如下图中所有回答的内容,并且制作词云图. 用到的库 import requests # import jsonfrom PIL import Image from pyque ...
- python爬取豆瓣小组_Python 爬虫实例+爬取豆瓣小组 + wordcloud 制作词云图
目标 利用PYTHON爬取如下图中所有回答的内容,并且制作词云图. 用到的库 import requests # import json from PIL import Image from pyqu ...
最新文章
- 2020.12.17
- reactivecocoa基础讲解
- ChemBioDraw 制作DMT屏保
- LeetCode第 227 场周赛题解
- python中使用cv2.findContours返回值too many values to unpack (expected 2)错误如何解决
- EF sqlite3报错 System.Data.Entity.Core.EntityException: 在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。...
- Java——多线程使用详解
- 折正方体-------------给你出道题
- 数值积分方法的c语言实现,编程实现数值积分的几种--方法 c语言.doc
- 吴恩达深度学习课程第二章第三周编程作业(pytorch实现)
- zib机器人怎么_ZIB智伴机器人好不好 ZIB智伴机器人使用测评
- 中文ASCII码对照表
- 计算机是uefi启动 不能装win7,uefi+gpt分区安装win7图文教程 uefi加gpt模式安装win7 64位的方法...
- ictclas4j java_使用继续完善前人写的文章:使用ICTCLAS JAVA版(ictclas4j)进行中文分词...
- oracle安装后,电脑变得很卡,解决办法(安装的是oracle11g)
- 小米手机定价与《怪诞行为学》
- Realsense-Ros安装配置
- 如何让Win10电脑不更新呢
- 手机中使用到的SENSOR相关原理
- 用PS制作动态雪景的教程