前言
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者: Yura不说数据说 ,PYuraL
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
数据爬取
其实我一开始是想用豆瓣网的评论的,但是我翻了翻吧,发现“最热评论”只能看到500条,“最新评论”只能显示100条,拿600条数据能分析出个啥?
那是哪1000条评论呢?我们看到网址中有个关键词“ts=1549640420581”,其实就是当前时间的意思(时间戳),转化一下就是:
通过百度各位大神的爬虫过程,我发现终极解决方法就是更改ts的值!如果说偏移量15的意思是从这个查询的时间往前偏移15条再取得15条评论数据(limit=15),那么我们每次更改ts值不就可以了。
第一个ts值是程序开始运行的时间,第二个值就从已经获取的评论数据中拿到最早的那个数据,以此不断往前翻滚……
我爬取了2月8日24点之前的所有评论信息,按App显示此时至少有80000+条数据,但是我爬下来总共只有4w+条…数据缺失还是比较严重的。
数据清洗
拿到数据除了做词云用了Python(代码在最后),其他的内容Excel分分钟解决,这里尤其感谢发明“数据透视表”的兄弟。
数据分析
1.观众信息
再看看4天用户评价数量的变化:
那用户都喜欢在什么时间评论呢?对比看四天的评论hour数据:
嗯,非常符合大家“醒了看电影,看完吃饭,吃了再看,看了再睡‘的“节假日生活作息”。
2.评分情况
3.评论内容
先看看点赞数最高的5条评论。
那通过词云具体看一下评论内容:
from bs4 import BeautifulSoup
import requests
import warnings
import re
from datetime import datetime
import json
import random
import time
import datetime
headers = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
'Connection':'keep-alive'}
cookies={'cookie':'_lxsdk_cuid=168c325f322c8-0156d0257eb33d-10326653-13c680-168c325f323c8; uuid_n_v=v1; iuuid=30E9F9E02A1911E9947B6716B6E91453A6754AA9248F40F39FBA1FD0A2AD9B42; webp=true; ci=191%2C%E5%8F%B0%E5%B7%9E; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; __mta=49658649.1549462270794.1549465778684.1549548206227.3; _lxsdk=30E9F9E02A1911E9947B6716B6E91453A6754AA9248F40F39FBA1FD0A2AD9B42; _lxsdk_s=168c898414e-035-f0e-e6%7C%7C463'}
#url设置offset偏移量为0
url = 'http://m.maoyan.com/review/v2/comments.json?movieId=1218091&userId=-1&offset=0&limit=15&ts={}&type=3'
comment=[]
nick=[]
score=[]
comment_time=[]
gender=[]
userlevel=[]
userid=[]
upcount=[]
replycount=[]
ji=1
url_time=url_time=int(time.time())*1000#获取当前时间(单位是毫秒,所以要✖️1000)
for i in range(2000):
value=15*i
url_range=url.format(url_time)
res=requests.get(url_range,headers=headers,cookies=cookies,timeout=10)
res.encoding='utf-8'
print('正在爬取第'+str(ji)+'页')
content=json.loads(res.text,encoding='utf-8')
list_=content['data']['comments']
count=0
for item in list_:
comment.append(item['content'])
nick.append(item['nick'])
score.append(item['score'])
comment_time.append(datetime.datetime.fromtimestamp(int(item['time']/1000)))
gender.append(item['gender'])
userlevel.append(item['userLevel'])
userid.append(item['userId'])
upcount.append(item['upCount'])
replycount.append(item['replyCount'])
count=count+1
if count==15:
url_time=item['time']
ji+=1
time.sleep(random.random())
print('爬取完成')
print(url_time)
result={'用户id':userid,'用户昵称':nick,'用户等级':userlevel,'性别':gender,'时间':comment_time,'评分':score,'评论内容':comment,'点赞':upcount,'评论':replycount}
results=pd.DataFrame(result)
results.info()
results.to_excel('猫眼_飞驰人生.xlsx')