前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python采集豆瓣网top250前10和后10电影短评并进行语义分析

python采集豆瓣网top250前10和后10电影短评并进行语义分析

作者头像
你像时光唯美i
发布2022-08-26 13:55:08
5881
发布2022-08-26 13:55:08
举报
文章被收录于专栏:python开发教程

今天收到一个订单需求,需要爬取豆瓣电影网top250中前10部和后10部的影评并对其进行语义分析比较这20部电影的质量,所以我们计划每部电影爬取100条短评并对评论进行语义分析,最后对其进行简单的数据可视化来比较其电影质量。话不多说,我们现在便开始抓取分析工作。

首先我们使用的工具是Pycharm,python3.6和谷歌浏览器。在这里我简单介绍一下我们使用的包,requests,通用爬虫包,time,时间模块,csv,写入数据需要的库,snowNLP,python的基础情感语义分析包,它会根据评论的关键词进行一个0-1的打分,越接近1表示评论越好,反之,越接近0表示越差。

一.爬取电影评论

我们还是之前介绍的爬虫通用流程先来采集数据。1.分析目标网址;2.发送请求获取网址响应内容;3.解析内容;4.保存响应内容。

1.分析目标网址

首先打开谷歌浏览器输入网址:https://movie.douban.com/top250。我们先进入第一部电影肖申克的救赎,点击最新短评,发现一页有20条数据。当我们点击下一页会发现网址变为:

在点击下一页会发现:

对比两个网址会发现除了start由20变为40其他并没有任何变化,右击检查查看网页源代码发现评论都在源代码中,说明网页是静态加载。所以并不需要抓包。另外subject后为电影id,当我们需要拿其他电影的评论时,只需要换个电影id就可以了。

2.发送请求获取网址响应内容;

导包&构造请求头

代码语言:javascript
复制
import requests
import csv
import time
from lxml import etree
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',}

获取响应内容

代码语言:javascript
复制
url = "https://movie.douban.com/subject/1291824/comments?start={}&limit=20&status=P&sort=time".format(i)
response = requests.get(url=url,headers=headers).text

3.解析网页内容

代码语言:javascript
复制
html_datas = etree.HTML(response)
comments = html_datas.xpath('//span[@class="short"]/text()')
for comment in comments:
    #print(comment)
    comment = "".join(comment).strip("").replace('\n',',').replace(',',',')
    print(comment)

4.保存网页内容

代码语言:javascript
复制
with open('moviecomment.csv', mode='a', newline="") as csvfile:
    csv_writer = csv.writer(csvfile, delimiter=',')
    csv_writer.writerow([comment])
二.情感语义分析
使用snowNLP进行评论的语义分析1.打开爬取的csv文件
f = open("moviecomment.csv","r")
datalist = f.readlines()2.进行语义分析for data in datalist:
    s = SnowNLP(data)
    a = s.sentiments
    print(a)#a的值为语义值3.对每部电影的100条影评取平均值得出结果为0.8310106064935262, 0.8044251181047334, 0.8108712143092854,0.858670540134834, 0.8589124243025005, 0.8762928658423270.8486057545234993, 0.8051373657653026, 0.777180409449240.823043718672946, 0.8363996333655149, 0.8584828917206430.8721060226962409, 0.7198451239815864, 0.879365569139330.8183443743080219, 0.9269355936086786, 0.772749500162290.8122440996032988, 0.8656266024493757三.使用matlibplot对数据进行简单的可视化import matplotlib.pyplot as plt
x_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
y_data = [0.8310106064935262, 0.8044251181047334, 0.8108712143092854, 0.858670540134834, 0.8589124243025005, 0.8762928658423276, 0.8486057545234993, 0.8051373657653026, 0.7771804094449548, 0.823043718672946, 0.8363996333655149, 0.8584828917206438, 0.8721060226962409, 0.7198451239815864, 0.8793655691393392, 0.8183443743080219, 0.9269355936086786, 0.7727495001622988, 0.8122440996032988, 0.8656266024493757]
plt.xlabel('name')
plt.ylabel('score')
plt.xticks(x_data,x_data[::1])
plt.title('movie score line bar chart')
#折线图
plt.plot(x_data,y_data,"--o")
#柱状图
plt.bar(x_data,y_data)
plt.show()最后得到结果图:
   最后得出的图比较简单,但是也能说明一些问题,其中第14部电影《猜火车》语义值最低,第17部电影《宝莱坞之钢铁奶爸》的语义值最高,说明目前大众比较喜欢看一些亲情片。今年《我的姐姐》和《你好,李焕英》的成功可能也说明了这个问题。大家需要源码请私聊我,这次的教程就到这里了,非常感谢大家。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python开发教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档