Python 爬取猫眼电影《无名之辈》并对其进行数据分析

python免费学习资料以及群交流解答点击即可加入


获取猫眼接口数据


作为一个长期宅在家的程序员,对各种抓包简直是信手拈来。在 Chrome 中查看原代码的模式,可以很清晰地看到接口,接口地址即为:

http://m.maoyan.com/mmdb/comments/movie/1208282.json?v=yes&offset=15

在 Python 中,我们可以很方便地使用 request 来发送网络请求,进而拿到返回结果:

def getMoveinfo(url):

session = requests.Session()

headers = {

“User-Agent”: “Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X)”

}

response = session.get(url, headers=headers)

if response.status_code == 200:

return response.text

return None

根据上面的请求,我们能拿到此接口的返回数据,数据内容有很多信息,但有很多信息是我们并不需要的,先来总体看看返回的数据:

{

“cmts”:[

{

“approve”:0,

“approved”:false,

“assistAwardInfo”:{

“avatar”:“”,

“celebrityId”:0,

“celebrityName”:“”,

“rank”:0,

“title”:“”

},

“authInfo”:“”,

“cityName”:“贵阳”,

“content”:“必须十分,借钱都要看的一部电影。”,

“filmView”:false,

“id”:1045570589,

“isMajor”:false,

“juryLevel”:0,

“majorType”:0,

“movieId”:1208282,

“nick”:“nick”,

“nickName”:“nickName”,

“oppose”:0,

“pro”:false,

“reply”:0,

“score”:5,

“spoiler”:0,

“startTime”:“2018-11-22 23:52:58”,

“supportComment”:true,

“supportLike”:true,

“sureViewed”:1,

“tagList”:{

“fixed”:[

{

“id”:1,

“name”:“好评”

},

{

“id”:4,

“name”:“购票”

}

]

},

“time”:“2018-11-22 23:52”,

“userId”:1871534544,

“userLevel”:2,

“videoDuration”:0,

“vipInfo”:“”,

“vipType”:0

}

]

}

如此多的数据,我们感兴趣的只有以下这几个字段:

nickName, cityName, content, startTimescore

接下来,进行我们比较重要的数据处理,从拿到的 JSON 数据中解析出需要的字段:

def parseInfo(data):

data = json.loads(html)[‘cmts’]

for item in data:

yield{

‘date’:item[‘startTime’],

‘nickname’:item[‘nickName’],

‘city’:item[‘cityName’],

‘rate’:item[‘score’],

‘conment’:item[‘content’]

}

拿到数据后,我们就可以开始数据分析了。但是为了避免频繁地去猫眼请求数据,需要将数据存储起来,在这里,笔者使用的是 SQLite3,放到数据库中,更加方便后续的处理。存储数据的代码如下:

def saveCommentInfo(moveId, nikename, comment, rate, city, start_time)

conn = sqlite3.connect(‘unknow_name.db’)

conn.text_factory=str

cursor = conn.cursor()

ins=“insert into comments values (?,?,?,?,?,?)”

v = (moveId, nikename, comment, rate, city, start_time)

cursor.execute(ins,v)

cursor.close()

conn.commit()

conn.close()

数据处理


因为前文我们是使用数据库来进行数据存储的,因此可以直接使用 SQL 来查询自己想要的结果,比如评论前五的城市都有哪些:

SELECT city, count(*) rate_count FROM comments GROUP BY city ORDER BY rate_count DESC LIMIT 5

结果如下:

在这里插入图片描述

从上面的数据, 我们可以看出来,来自北京的评论数最多。

不仅如此,还可以使用更多的 SQL 语句来查询想要的结果。比如每个评分的人数、所占的比例等。如笔者有兴趣,可以尝试着去查询一下数据,就是如此地简单。

而为了更好地展示数据,我们使用 Pyecharts 这个库来进行数据可视化展示。

根据从猫眼拿到的数据,按照地理位置,直接使用 Pyecharts 来在中国地图上展示数据:

data = pd.read_csv(f,sep=‘{’,header=None,encoding=‘utf-8’,names=[‘date’,‘nickname’,‘city’,‘rate’,‘comment’])

city = data.groupby([‘city’])

city_com = city[‘rate’].agg([‘mean’,‘count’])

city_com.reset_index(inplace=True)

data_map = [(city_com[‘city’][i],city_com[‘count’][i]) for i in range(0,city_com.shape[0])]

geo = Geo(“GEO 地理位置分析”,title_pos = “center”,width = 1200,height = 800)

while True:

try:

attr,val = geo.cast(data_map)

geo.add(“”,attr,val,visual_range=[0,300],visual_text_color=“#fff”,

symbol_size=10, is_visualmap=True,maptype=‘china’)

except ValueError as e:

e = e.message.split("No coordinate is specified for ")[1]

data_map = filter(lambda item: item[0] != e, data_map)

else :

break

geo.render(‘geo_city_location.html’)

注:使用 Pyecharts 提供的数据地图中,有一些猫眼数据中的城市找不到对应的从标,所以在代码中,GEO

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

2296f86381401c05e862fe4e9.png)

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
[外链图片转存中…(img-tx12Hl5V-1711942292627)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值