点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

岁寒,然后知松柏之后凋也。

《哪吒之魔童降世》这部国产动画巅峰之作,上映快一个月时间,票房口碑双丰收。

迄今已有超一亿人次观看,票房达到42.39亿元,超过复联4,跻身中国票房纪录第三名,仅次于《战狼2》和《流浪地球》。

去看豆瓣的评论,网友们对《哪吒》的喜爱溢于言表:

那么,网友评价哪吒这部动画用的最多的词是什么呢?

何不把这些短评都爬取下来,再做个词云分布,就能了解网友都说了啥了。

这次是用python登录并爬取豆瓣短评,并做词云分布,分别用到requests、xpath、lxml、jieba、wordcloud等python库。

全文步骤如下:

第一步

登录豆瓣

第二步

爬取豆瓣短评

第三步

分词处理

第四步

词云展示

话不多说,开始上代码吧!
# 导入需要的库
import requests
import time
import pandas as pd
import random
from lxml import etree
from io import BytesIO
import jieba
from wordcloud import WordCloud
import numpy as np
from PIL import Image   # 为该项目创建一个类,命名nezha
# 该类有三个方法,分别是爬虫、分词、词云
class nezha():  def __init__(self): # 定义session,用以加载HTML self.session = requests.session()  # 定义爬虫的header,输入你浏览器上的header    self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'} # 豆瓣登录网址    self.url_login = 'https://www.douban.com/login'  #哪吒电影短评网址,注意有改动,为了动态翻页,start后加了格式化数字,短评页面有20条数据,每页增加20条  self.url_comment = 'https://movie.douban.com/subject/26794435/comments?start=%d&limit=20&sort=new_score&status=P'    def scrapy_(self):  # 加载登录界面HTML    login_request = self.session.get(self.url_login, headers=self.headers)    # 解析HTML    selector = etree.HTML(login_request.content)   # 以下是登录需要填的一些信息 post_data = {'source': 'None',  # 不需要改动    'redir': 'https://www.douban.com',  # 不需要改动 'form_email': 'your douban account',  # 填账号 'form_password': 'your password',  # 填密码    'login': '登录'}  # 不需要改动 # 下面是获取验证码图片的链接 captcha_img_url = selector.xpath('//img[@id="captcha_image"]/@src') # 如果有验证码,获取验证码图片,并填写图片上的验证码   if captcha_img_url != []:  # 获取验证码图片   pic_request = requests.get(captcha_img_url[0]) # 打开验证码图片   img = Image.open(BytesIO(pic_request.content)) img.show()  # 填写验证码 string = input('请输入验证码:') post_data['captcha-solution'] = string   # 获取验证码匹配的字符    captcha_id = selector.xpath('//input[@name="captcha-id"]/@value')   # 将字符放入登录信息里    post_data['captcha-id'] = captcha_id[0]  # 登录    self.session.post(self.url_login, data=post_data)  print('已登录豆瓣')    # 下面开始抓取短评  # 初始化4个list用于存储信息,分别存用户名,评星,时间,评论文字 users = [] stars = [] times = [] comment_texts = [] # 抓取500条,每页20条,这也是豆瓣给的上限  for i in range(0, 500, 20): # 获取HTML    data = self.session.get(self.url_comment % i, headers=self.headers)   # 状态200表明页面获取成功 print('进度', i, '条', '状态是:',data.status_code)   # 暂停0~1秒时间,防止IP被封    time.sleep(random.random()) # 解析HTML    selector = etree.HTML(data.text)   # 用xpath获取单页所有评论    comments = selector.xpath('//div[@class="comment"]') # 遍历所有评论,获取详细信息  for comment in comments:    # 获取用户名 user = comment.xpath('.//h3/span[2]/a/text()')[0]    # 获取评星  star = comment.xpath('.//h3/span[2]/span[2]/@class')[0][7:8]    # 获取时间  date_time = comment.xpath('.//h3/span[2]/span[3]/@title')   # 有的时间为空,需要判断下   if len(date_time) != 0:    date_time = date_time[0]   else:   date_time = None   # 获取评论文字    comment_text = comment.xpath('.//p/span/text()')[0].strip()  # 添加所有信息到列表,以下相同 users.append(user)  stars.append(star)  times.append(date_time) comment_texts.append(comment_text)  # 用字典包装 comment_dic = {'user': users, 'star': stars, 'time': times, 'comments': comment_texts} comment_df = pd.DataFrame(comment_dic)  # 转换成DataFrame格式   comment_df.to_csv('duye_comments.csv')  # 保存数据    comment_df['comments'].to_csv('comment.csv', index=False)  # 将评论单独再保存下来,方便分词    print(comment_df)   def jieba_(self):   # 打开评论数据文件  content = open('comment.csv', 'r', encoding='utf-8').read() # jieba分词   word_list = jieba.cut(content) # 添加自定义词,该片经典台词‘我命由我不由天’必须加进去    with open('自定义词.txt') as f:   jieba.load_userdict(f)  # 新建列表,收集词语  word = []  # 去掉一些无意义的词和符号,我这里自己整理了停用词库  for i in word_list: with open('停用词库.txt') as f:   meaningless_file = f.read().splitlines()   f.close()   if i not in meaningless_file:   word.append(i.replace(' ', '')) # 全局变量,方便词云使用    global word_cloud   # 用逗号隔开词语   word_cloud = ','.join(word)   print(word_cloud)   def word_cloud_(self):  # 打开你喜欢的词云展现背景图,这里选用哪吒电影里的图片 cloud_mask = np.array(Image.open('nezha.jpg'))   # 定义词云的一些属性 wc = WordCloud(    background_color="white",  # 背景图分割颜色为白色  mask=cloud_mask,  # 背景图样   max_words=300,  # 显示最大词数   font_path='./fonts/simhei.ttf',  # 显示中文  min_font_size=5,  # 最小尺寸   max_font_size=100,  # 最大尺寸 width=400  # 图幅宽度  )   # 使用全局变量,刚刚分出来的词 global word_cloud   # 词云函数  x = wc.generate(word_cloud)    # 生成词云图片    image = x.to_image()   # 展示词云图片    image.show()    # 保存词云图片    wc.to_file('pic.png') # 创建类对象
nezha = nezha()
# 抓取豆瓣短评
nezha.scrapy_()
# 使用jieba对短评进行分词
nezha.jieba_()
# 使用wordcloud展示词云
nezha.word_cloud_()

看看我们抓取到的短评:

然后对短评分词处理:

选一张喜欢的图片做词云背景:

最后,制作词云图:
可以看到几个关键词:
哪吒、故事、国漫、大圣归来、我命由我不由天、喜欢、偏见
看来,大家对这部动画的故事情节比较满意,不经意地和大圣归来作对比。让人最感动的台词是“我命由我不由天”,一部良心的国产动画,大家期待已久,怎么能让人不喜欢呢?

------------------- End -------------------

往期精彩文章推荐:

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

请说一下你多哪吒的看法。

哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说相关推荐

  1. 100行python代码爬取5万条网易新闻评论

    前几天学习了一下如何爬取网易新闻动态评论,以demo为基础扩展成了100行的小程序,一次可以获取5万多条评论(当然,这取决于当时的评论总数),代码贴上: from bs4 import Beautif ...

  2. python模拟别人说话的声音_如何用100行Python代码做出魔性声控游戏“八分音符酱”...

    最近几天,一款魔性的小游戏在微博上刷屏了,各大平台的主播也纷纷如感染病毒一样直播自己怎么玩这个游戏(被游戏玩). 这个游戏叫做<不要停!八分音符酱♪>.它是一款来自岛国的恶搞游戏,主角是一 ...

  3. 100个必会的python脚本-100行Python代码实现自动抢火车票(附源码)

    前言 又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool.下面话不多说了,来一起看看详细的介绍吧. 先准备好: 12306网站用户名和密码 chrome浏览器及下载chromedr ...

  4. c语言微信挑一挑编程,100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  5. 100行python代码做一个程序_100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  6. python爬虫代码1000行-几行Python代码爬取3000+上市公司的信息

    几行Python代码爬取3000+上市公司的信息 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 几行Python代码爬取3000+上市公司的信息.txt ] (友情提示:右键 ...

  7. 20行Python代码爬取王者荣耀全英雄皮肤改进版

    0 写在前面 看了大神的这篇CSDN:20行Python代码爬取王者荣耀全英雄皮肤访问量那么高,忍不住想要蹭一下热点,但是蹭归蹭,总得有点货才行,于是我品我细品,发现其代码总体有三点我觉得值得改进的地 ...

  8. [转载]20行Python代码爬取王者荣耀全英雄皮肤

    20行Python代码爬取王者荣耀全英雄皮肤,这是高手.原文链接: https://blog.csdn.net/qq_42453117/article/details/103190981 除了语言学习 ...

  9. python 爬取财经新闻股票_70行python代码爬取新浪财经中股票历史成交明细

    70行python代码爬取新浪财经中股票历史成交明细 发布时间:2018-07-28 01:55, 浏览次数:635 , 标签: python 最近在研究股票量化,想从每笔成交的明细着手,但历史数据的 ...

  10. 编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法

    这篇文章主要介绍了编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法,用到了Python的urllib和urllib2模块,需要的朋友可以参考下 抓取豆瓣电影TOP100 一.分析豆瓣top ...

最新文章

  1. 百度工具栏不显示出来_解决win10系统桌面应用图标显示不出来的问题
  2. FreeBSD基金会添加新成员,梁莉成为第一位来自微软和中国的基金会董事
  3. 当脑机接口应用于建筑工地,会发生什么?
  4. selenium webdriver python 环境搭建
  5. SQL高级---SQL 约束 (Constraints)
  6. 牛逼!Python的判断、循环和各种表达式(长文系列第②篇)
  7. python补充urllib教程,Python爬虫之urllib基础用法教程
  8. 【带着canvas去流浪(11)】Three.js入门学习笔记
  9. 易语言界面开发系列教程之(EX_UI使用系列教程(15)--EX组件(列表框EX))】
  10. 机器人动力学(牛顿欧拉推导)
  11. AotucCrawler 快速爬取美女图片
  12. ps2硬盘接linux,PS2加装硬盘详细指导
  13. 在Google工作的十年,也是我开心的十年
  14. 请不要在“微服务”的狂热中迷失自我!
  15. “差不多先生”引发的悲剧
  16. android非线性渐变色,不同区域显示不同的渐变效果
  17. 线下沙龙 | EOS入门及最新技术解读
  18. 生成化学表达式下标、上标数字
  19. ​科技“新冷战”核心技术突破!道翰天琼认知智能机器人平台API接口大脑为您揭秘
  20. 【BBP 算法】HDU 6217

热门文章

  1. Renascence架构介绍——目录
  2. 怎么使用虚拟机装服务器系统,如果使用VMware虚拟机创建系统,超详细安装图文教程...
  3. 物联网:Android端控制ZigBee实现生产环境自动控制
  4. MySQL多实例管理(mysqld_multi)
  5. 2022年 会员管理的五大趋势
  6. Python实现将图片转为Excel
  7. 短信验证码注册登录,Python可以用两种方法实现
  8. MATLAB篇之层次分析法
  9. rtthread iic读取M24C64的测试程序
  10. 计算机二级题目之c运算符和表达式练习学习