网络爬虫实战(三):爬取豆瓣、猫眼流浪地球数万条评论信息

春节如约而至,随着消费水平的提高,越来越多的人们走进电影院,观看春节档电影。去看啥电影,先看看网友们的评分评论也是非常有必要的,于是前几天遍想到用爬虫去爬取一些有用的信息。

爬取豆瓣电影评论

可以看得出,流浪地球的评分遥遥领先,那我们便去一探究竟,来到豆瓣网搜索影评 

https://movie.douban.com/subject/26266893/comments?start=220&limit=20&sort=new_score&status=P

结果发现从start=220开始页面就没有正常显示了,也就是说只能抓取前几百条评论,不过聊胜于无,咱们说干就干

html页面评论部分:

 <p class="">
            
                <span class="short">如果没有办法在科幻电影前,必须加上中国的话,那么这部电影确实在特效上做到国内目前为止的最好。但,如果放到国际,请各位扪心自问里面的特效,置景,甚至服装造型,有哪些不是在近十年科幻电影里出现过。甚至连开场设置,特效,几个关键人物都多少“致敬”了《环太平洋》。很遗憾,一部没有丝毫创新的电影,同样也无法接受它被某些影评人称之为所谓开启了“中国科幻电影元年”。更为难接受的是电影内核的价值观,无法苟同。没想到都2019年了,还是“人多力量大”和“活着”的充斥在银幕里。</span>
        </p>

核心解析网页代码如下:

def getComment(url,headers):
    html=getHTMLText(url,headers)
    soup=BeautifulSoup(html,'html.parser')
    comment=soup.findAll('span','short')
    lst=[]
    for com in comment:
        lst.append(com.getText()+'\n')
    return lst

爬取十页评论并存入txt文件

f=open('流浪地球豆瓣评论.txt', 'w', encoding='utf-8')
    for page in range(10):
        url='https://movie.douban.com/subject/26266893/comments?start='+ str(20*page) +'&limit=20&sort=new_score&status=P'
        print ("正在爬取第%s页的评论:" % (page+1))
        print (url+'\n')
        for i in getComment(url,headers):
            f.write(i)

部分评论如下:

还能更土更儿戏一点吗?毫无思考仅靠煽动,毫无敬畏仅余妄想。好的科幻片应该首先承认人类的无知,并跳出人类的视角去看待人与宇宙的关系,而不是一头扎入狭隘的家庭纠纷与大国情怀中自作聪明自我感动。被吹到不行的特效如同导演抡圆了膀子朝观众脸上砸各种金银珠宝,闪到不行但全无美感。有人说作为中国第一部硬科幻电影,不要跟美国比,只想说这宣传攻势票房体量已经超越大多数好莱坞商业大片了,凭啥不能和人家比?所以评价《流浪地球》很简单,你把片中所有角色换成美国人,然后再想想自己愿意打几星。
电影比预期要更恢弘磅礴,晨昏线过后的永夜、火种计划、让地球流浪、木星推动地球…等等大小设定,没想到中国也能拍这么大架构、大格局的科幻片了,而且是第一部,了不得。以前看国外科幻感觉离我们很远,这一次看到熟悉的北京大裤衩、上海东方明珠都变成零下89°冰天冻地的末世场景,既猎奇又唏嘘。虽然在剧情上有套路,对于这部中国文化背景下的科幻新生儿,鼓励多于挑剔。导演说美国人拍科幻是放弃地球、去挖掘新的人类居住地,而中国人是不放弃地球、守住家土的情怀…“希望是我们回家的唯一方向”
1.终于,轮到我们仰望星空。2.后启示录死亡废墟,赛博朋克地下城,以及烟波浩渺的末日想象,缔造了真正意义上的第一部国产硬科幻。3.拖着地球逃离太阳系的惊艳设定,本身便是对“家国情怀”的宏大投射,正应了刘慈欣那句“太阳死了,人还活着”。4.绝不仅仅只是电影工业巨壳下的类型尝试,始终荡涤其间的悲壮气息已然具备了史诗级质感,这是大刘的脑洞宇宙与电影创作团队精益求精造就的惊喜。5.屈楚萧很带感,演活了一个勇敢、中二又不失温情的英雄少年。6.期待能成爆款吧,这样才有机会等到更多的国产科幻电影;或许以后会出现更好的,但至今这无疑是最好的。

词云生成


整个提取的评论显示得也不够清楚,想到用词云来显示评论,通过jieba模块分词,Wordcloud模块生成词云

wc = WordCloud(background_color = "white", #设置背景颜色
               mask = imread('ball.jpg'),  #设置背景图片
               max_words = 1000, #设置最大显示的字数
               stopwords = ["的", "这种", "这样", "还是", "就是", "这个"], #设置停用词
               font_path = "C:\Windows\Fonts\simkai.ttf",  # 设置为楷体 常规
               #设置中文字体,使得词云可以显示(词云默认字体是“DroidSansMono.ttf字体库”,不支持中文)
               max_font_size = 60,  #设置字体最大值
               random_state = 30, #设置有多少种随机生成状态,即有多少种配色方案
    )
myword = wc.generate(wl)#生成词云
wc.to_file('result.jpg')

效果如下图:

爬取猫眼电影评论

搜电影相关,自然也少不了去豆瓣,一看果然发现了新世界

找到猫眼的数据接口

http://m.maoyan.com/review/v2/comments.json?movieId=248906&userId=-1&offset=0&limit=15&ts=0&type=3

通过对评论数据进行分析,得到如下信息:

返回的是json格式数据

248906表示电影的专属id;

offset表示偏移量

ts表示时间戳

相关内容链接https://blog.csdn.net/lyc44813418/article/details/86724629

cmts表示评论,每次获取15条,offset偏移量是指每次获取评论时的起始索引,向后取15条

hcmts表示热门评论前10条

total表示总评论数

{"cmts":[],"hcmts":[{"approve":42917,"approved":false,"assistAwardInfo":{"avatar":"","celebrityId":0,"celebrityName":"","rank":0,"title":""},"authInfo":"","avatarurl":"https://img.meituan.net/avatar/1f2e053c7893245cd07502db9ce0586716083.jpg","cityName":"重庆","content":"好看不解释,有些在文科班都是垫底的low不适合看,只适合看外国矫情装文艺的片。","filmView":false,"gender":1,"id":134068940,"isMajor":false,"juryLevel":0,"majorType":0,"movieId":248906,"nick":"徐木木夕","nickName":"徐木木夕","oppose":0,"pro":false,"reply":4392,"score":5,"spoiler":0,"startTime":"2019-02-05 03:23:59","supportComment":true,"supportLike":true,"sureViewed":0,"tagList":{"fixed":[{"id":1,"name":"好评"},{"id":4,"name":"购票"}]},"time":"2019-02-05 03:23","userId":133516769,"userLevel":2,"videoDuration":0,"vipInfo":"","vipType":0},{"approve":31262,"approved":false,"assistAwardInfo":

获取评论代码:

url = 'http://m.maoyan.com/review/v2/comments.json?movieId=248906&userId=-1&' \
              'offset=0&limit=15&ts={}&type=3'
        while self.time > self.premiere_time:
            req_url = url.format(self.time)
            res = requests.get(req_url, headers=self.headers)
            count = 0
            for com in res.json()['data']['comments']:
                self.parse_comment(com=com)
                count += 1
                if count == 15:
                    self.time = com['time']

            print('成功爬取截止到{}的数据!'.format(datetime.fromtimestamp(int(self.time/1000))))
            #转换为datetime格式的时间

爬取首映到当前时间的电影评论其参数url: 评论真实请求的url,参数ts为时间戳,premiere_time: 首映时间的时间戳

连接mongoDB数据库并存入

 # 配置mongodb数据库
 host = os.environ.get('MONGODB_HOST', '127.0.0.1')  # 本地数据库
 port = os.environ.get('MONGODB_PORT', '27017')  # 数据库端口
 mongo_url = 'mongodb://{}:{}'.format(host, port)
 mongo_db = os.environ.get('MONGODB_DATABASE', 'maoyan')
 client = MongoClient(mongo_url)
 self.db = client[mongo_db]
 self.db['maoyan'].create_index('id', unique=True)  # 以评论的id为主键进行去重

显示数据部分信息

一共获得84886条评论数据

 

 

详细代码戳    github.com/librauee

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值