结果展示
目录详情
网页分析
发送请求
热评分析
完整代码
精美词云
网页分析
我们打开豆瓣短评,找到我们所要获取电影的短评列表。
网页F12打开浏览器开发者模式,找到如下
发送请求的真实链接:
数据是存储在一个json的数据集合里面的。
我们使用浏览器插件打开
我们要获取的图片信息都是在一个叫做html的列表里面。
老规矩,先获取json数据集。
发送请求
url = f'https://movie.douban.com/subject/35231076/comments?percent_type=&start={(page - 1) * 20}&limit=20&status=P&sort=new_score&comments_only=1' headers = { 'Cookie': 'll="118375"; bid=-0vQx1zNf9g; __utmc=30149280; __utmz=30149280.1626393826.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmc=223695111; __utmz=223695111.1626393826.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; _vwo_uuid_v2=D3D09D476AD97DE25492B13E46DCC0FF0|b7ddbeee10c323627b2a1ed1fce3b44b; __gads=ID=a11b92658502a109-22900c2a5bca007e:T=1626393873:RT=1626393873:S=ALNI_MZbuKNW-xrOqCRLWhABJ0mmTU92Mg; __yadk_uid=UpfAkPPZNmGCYlDjV2D7pGcAJqNOLEcZ; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1626404180%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DtJ1wg7vbDM0tTcX_Blaz4Lokg24OTHJBYQXr-FPRas3CxkEMFvoM9H2cFY3nMJuK%26wd%3D%26eqid%3Ddd97e590000679a10000000560f0ccdd%22%5D; _pk_ses.100001.4cf6=*; ap_v=0,6.0; __utma=30149280.1997475757.1626393826.1626393826.1626404180.2; __utmb=30149280.0.10.1626404180; __utma=223695111.51408786.1626393826.1626393826.1626404180.2; __utmb=223695111.0.10.1626404180; _pk_id.100001.4cf6=8e1ed7625dcefcf1.1626393826.2.1626404198.1626396404.', f'Referer': f'https://movie.douban.com/subject/35231076/comments?start={(page-1)*20}&limit=20&status=P&sort=new_score', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4503.5 Safari/537.36' } resp = requests.get(url, headers=headers) if resp.status_code == requests.codes.ok: text = resp.json()['html'] print(text)
成功获取到浏览器响应之后我们接下来获取每一部电影的评分作者、评分时间、评分和评论
# 获取当前页面所有的div列表 div_list = html_data.xpath("//div[@class='comment-item ']") for div in div_list: # 姓名 cmt_name = div.xpath("./div[@class='comment']/h3/span[@class='comment-info']/a/text()") cmt_names = ''.join(cmt_name).strip() # 评论时间 cmt_time = div.xpath("./div[@class='comment']/h3/span[@class='comment-info']/span[@class='comment-time ']/text()") cmt_times = ''.join(cmt_time).strip() # 星评 star = div.xpath("./div[@class='comment']/h3/span[@class='comment-info']/span[2]/@title") stars = ''.join(star).strip() # 评论内容 comment = div.xpath("./div[@class='comment']/p[@class=' comment-content']/span[@class='short']/text()") comments = ''.join(comment).strip() count += 1 time.sleep(random.random()*3) print(cmt_names, cmt_times, stars, comments)
数据提取如下:
李不秃. 2021-07-08 较差 我的天,这糟糕的演技和剧情,披着职业皮谈恋爱,一切为谈恋爱服务,工业糖精胡撒一气,这才第一集就看不下去了,才第一集哎,就忙着铺感情线了 土豆不见了 2021-07-08 推荐 救援场面看的很揪心,日常生活拍的很有趣,于是看的很上头,节奏再紧凑些就更加完美啦 冩潢の夢支棱!2021-07-08 力荐 25min,至少国内多一部消防战士为主角的剧还挺好的,我之前印象中没看到过几部,电影倒是有的,成品质量还是有很多很多可以改进的地方啦,比如坐在急救车里,却一点没有生死时速的移动感,比如隧道现场,一开始还对烟雾做了防备,结果深入现场后大家都跟没有烟雾一样,居然还在现场附近接生……这……不过我真的没有专业知识,大概会有专业的知识科普号来科普吧 丸皮 2021-07-08 还行 编剧不行……剧情和对话都太悬浮了……强行安排孕妇十秒钟生娃,更是没必要………啊!多好的题材啊!而且是原声!痛心…………祈祷俊子以后多接好剧! 一个康波的游戏 2021-07-08 力荐 剧本还行,没翻车,能看下去 琼葩 2021-07-08 推荐 咦?喜欢的男女主角搭戏了,突然拥有了海景房??? 7.8虽然对男女主都有好感,但是自从知道男主女主名字之后就没期待过,竟然意外的还可以!剧情紧凑,救援场景真实,每对cp都挺甜,没有一个讨厌的角色,可以可以,就是男主再练练台词就好了。 Joyce0129 2021-07-09 力荐 本来以为是职业剧+甜宠剧,4集看完没想到是个喜剧,消防员日常打打闹闹太有趣了,有血有肉的日常场景更能全面展现消防员这个职业,救援场景也能看出来尽量还原了。目前来看男女主人设也都是直球型没有那么多误会和蒙在鼓里没办法相认的情节,适合ibg的看。剧情节奏很快,每集一个消防小知识也挺有趣的,剧荒打发时间看一看还是不错的。 彩虹海 2021-07-08 力荐 我宣布霍言和晏蓝就是坠坠坠坠吊的!!!好甜好甜好甜想嗑真人了…… TOB 2021-07-08 很差 本来不想发表评价的,但天天都挂在热搜上,没忍住点进去看了第一集,只能说本质偶像剧,这剧情真的不能说是对消防员的致敬。。。男女主演技也很堪忧。。。男主台词也太差了。。国内什么时候能拍一部真正的职业剧,我们普通观众真是吃了太多苦了【叹气】 孔鯉 2021-07-08 很差 把这片子拍成这样是对广大消防指战员的侮辱 Sugar 2021-07-09 力荐 一开始没报什么期望的,但后来看了几集之后觉得还挺甜的,节奏蛮快的,然后剧情也有我的苏点和爽点,蛮不错的。 豆友 2021-07-08 还行 其实也还好,毕竟消防这些也比较难拍,龚俊演技还是有的,蛮喜欢那种自然的演技。(但龚俊颜值还没有特别get到),女主不认识,也还行。但剧情看的其实还是稍微有点尴尬。 出来喝奶茶- 2021-07-09 力荐 刚把更新的4集看完,说说这剧吧,消医联动的题材吸引了我,再加上最近总是听见的龚俊这个名字,4集的剧情很紧凑不拖沓,有紧张,有搞笑,比预想中要好很多。不得不说龚俊的眼神戏真的很到位,和张慧雯的互动也很有爱,第一集含泪敬礼那里真的有被感动到,期待之后剧情的发展。
多页
多页数据分析的时候最简单的方法就是观察并分析多页连接的区别,如下:
https://movie.douban.com/subject/35231076/comments?percent_type=&start=20&limit=20&status=P&sort=new_score&comments_only=1 https://movie.douban.com/subject/35231076/comments?percent_type=&start=40&limit=20&status=P&sort=new_score&comments_only=1 https://movie.douban.com/subject/35231076/comments?percent_type=&start=60&limit=20&status=P&sort=new_score&comments_only=1
观察此链接除了start参数之外都没有变化,其实这个start参数就是控制翻页的。
它的变化规律就是(page-1)*20,据此我们可以构造出它的请求链接
url = f'https://movie.douban.com/subject/35231076/comments?percent_type=&start={(page - 1) * 20}&limit=20&status=P&sort=new_score&comments_only=1'
接下来我们就可以获取多页数据啦
# 多页抓取 for page in range(1, 10 + 1): print(f'-----------------正在抓取第{page}页影评-----------------') url = f'https://movie.douban.com/subject/35231076/comments?percent_type=&start={(page - 1) * 20}&limit=20&status=P&sort=new_score&comments_only=1' .......
数据存储
我们将获取到的数据存储到本地的excel之中,之前我有专门拉出来详细讲过,有兴趣的小伙伴可以参考
我是如何把python获取到的数据写入Excel的?
我们这里使用的是第一种,使用openpyxl来保存数据
# 创建workbook ws = op.Workbook() # 创建worksheet wb = ws.create_sheet(index=0) # 创建表头 wb.cell(row=1, column=1, value='名称') wb.cell(row=1, column=2, value='评价') wb.cell(row=1, column=3, value='时间') wb.cell(row=1, column=4, value='评论') # 保存数据 wb.cell(row=count, column=1, value=cmt_names) wb.cell(row=count, column=2, value=cmt_times) wb.cell(row=count, column=3, value=stars) wb.cell(row=count, column=4, value=comments) # 保存文件 ws.save('你好,火焰蓝短评.xlsx')
词云展示
为了更加直观的展示电影所述,我一般都是使用词云来做直观的展示。
我们使用的是stylecloud。
使用pandas来读取我们刚才保存的数据。
使用jieba来切割分词
使用stopwords来设置停用词
rcv_data = pd.read_excel('你好,火焰蓝短评.xlsx') c_title = rcv_data['评论'].tolist() #观影评论词云图 wordlist = jieba.cut(''.join(c_title)) result = ' '.join(wordlist) pic = 'img1.jpg' gen_stylecloud(text=result, icon_name="fab fa-apple", font_path='msyh.ttc', background_color="white", output_name=pic, custom_stopwords= ['了', '的', '是', '也'] ) print('绘图成功!')
最终效果展示如下:
我就不在此做其他项的可视化分析了,反正数据已经给你们了对吧
有问题的小伙伴们欢迎下方留言讨论哈~