作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159

爬虫综合大作业

  1. 选择一个热点或者你感兴趣的主题。
  2. 选择爬取的对象与范围。
  3. 了解爬取对象的限制与约束。
  4. 爬取相应内容。
  5. 做数据分析与文本分析。
  6. 形成一篇文章,有说明、技术要点、有数据、有数据分析图形化展示与说明、文本分析图形化展示与说明。
  7. 文章公开发布。

参考:

32个Python爬虫项目

都是谁在反对996?

Python和Java薪资最高,C#最低!

给《流浪地球》评1星的都是什么心态?

《都挺好》弹幕数据,比剧情还精彩?

爬了自己的微信好友,原来他们是这样的人……

春节人口迁徙大数据报告!

七夕前消费趋势数据

爬了一下天猫上的Bra购买记录,有了一些羞羞哒的发现...

Python做了六百万字的歌词分析,告诉你中国Rapper都在唱些啥

分析了42万字歌词后,终于搞清楚民谣歌手唱什么了

十二星座的真实面目

唐朝诗人之间的关系到底是什么样的?

中国姓氏排行榜


一、爬取对象

在2018年一月我有幸拜读了由上个世纪70年代永井豪大师创作的超前深度漫画《恶魔人》改编的动画《恶魔人crybaby》

这部佳作当时给了我极大的冲击,剧中“何为善恶,何为人性”这一拷问让我至现在还无法解答,所以在这次的爬虫学习中我决定爬取《恶魔人crybaby》中的短评,看下别人眼中的恶魔人是什么样子。

二、开始爬取

1.分析目标数据的网页结构

通过分析每一页的url都是由'https://movie.douban.com/subject/26997470/comments?start=' + (20*页数) + '&limit=20&sort=new_score&status=P'这种格式构成,

因此我们可以得出通用URL格式'https://movie.douban.com/subject/26997470/comments?start=' + str(20*page) + '&limit=20&sort=new_score&status=P'

通过分析html元素结构,可知短评的用户名数据与短评内容与点赞数位于class=comment_item的span元素,因此我们可以用beautifulsoup解析findall('span', 'comment_item')代码来先获取一个评论板块。

而同时发现评分内容处于class="comment-info"的span下的第一个span子元素中的title属性值,我们可以通过正则表达式匹配包含关键字class=allstar的span来获取对应的titile属性,也可以通过xpath方式来获取需要的数据,但是需要过滤掉没有做出评分的用户。

2.开始爬取数据

首先进行前30页的短评爬取:

if __name__ == '__main__':f1 = open('恶魔人crybaby好评度.txt', 'w', encoding='utf-8')for page in range(30):  # 豆瓣恶魔人crybaby前30页短评论url = 'https://movie.douban.com/subject/26997470/comments?start=' + str(20*page) + '&limit=20&sort=new_score&status=P'time.sleep(random.random() * 3)getPingfen(url)f1.write(str(pingajia))time.sleep(random.random() * 3)getPinglun(url)f1.close()print(pingajia)print(pinglun)writerCSV = pd.DataFrame(pinglun)writerCSV.to_csv('恶魔人crybaby.csv', encoding='utf-8')

新建恶魔人crybaby好评度.txt保存好评度数据,爬取的评论数据写入恶魔人crybaby.csv文件保存评论数据,同时设置随机时间间隔进行传入通用格式url进行爬取网页数据,减少网站压力。

global pingajia,pinglun #定义全局变量记录评分情况与评论相关数据
pingajia = {'很差': 0, '较差': 0, '还行': 0, '推荐': 0, '力荐': 0}
pinglun = []
def getHtml(url):#获取htmlproxies = {"http": "http://192.10.1.10:8080", "https": "http://193.121.1.10:9080"}cookies = {'cookie':'bid=umuLg3iZhkI; gr_user_id=98225c1a-dbb7-4892-9f1a-b109797f47b8; _vwo_uuid_v2=D4785A3539CB3B44B17B113925EFAF048|17c62c9137095bd21941127ee5001657; viewed="1770782_1200840"; __utmz=30149280.1553270495.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); ll="118281"; _pk_ses.100001.8cb4=*; __utma=30149280.1116038887.1553258504.1553270495.1561001711.3; __utmc=30149280; __utmt=1; ap_v=0,6.0; __yadk_uid=8ACD8TDbyZ5u3vvzrfBsgTPBHlA0BDFV; _pk_id.100001.8cb4=4df36ec4e19661d2.1561001704.1.1561001761.1561001704.; __utmb=30149280.2.10.1561001711'}headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:65.0'}res = requests.get(url,headers=headers, cookies=cookies)res.encoding = 'utf-8'  # 爬虫结果乱码,可以用UTF-8解码更正html = res.textreturn htmldef getPinglun(url):#获取页面上每个评论内容、点赞数与用户名html = getHtml(url)soup = BeautifulSoup(html, 'html.parser')duanpings = soup.findAll('div', class_='comment-item') #获取到所有评论itemfor duanping in duanpings:comment = {}comment['id'] = duanping.find("span",class_='comment-info').find('a').get_text()comment['comment'] = duanping.find("span", class_="short").get_text().replace('\n', '').replace(' ','')comment['vote'] = duanping.find("span", class_="votes").get_text()pinglun.append(comment)

用request方法获取解析网页,在request添加headers使爬虫模仿浏览器访问的行为,添加cookies可以使爬虫以登录状态访问网页以获取没有登录无法得到的数据,用beautifulsoup中的findall方法找到对应的元素获取相应的评论数据,findall之后再继续再生成字典保存相关属性数据,最后字典保存到pinglun数组中。

然后进行评分爬取:

global pingajia,pinglun #定义全局变量记录评分情况与评论相关数据
pingajia = {'很差': 0, '较差': 0, '还行': 0, '推荐': 0, '力荐': 0}
pinglun = []
def getHtml(url):#获取htmlproxies = {"http": "http://192.10.1.10:8080", "https": "http://193.121.1.10:9080"}cookies = {'cookie':'bid=umuLg3iZhkI; gr_user_id=98225c1a-dbb7-4892-9f1a-b109797f47b8; _vwo_uuid_v2=D4785A3539CB3B44B17B113925EFAF048|17c62c9137095bd21941127ee5001657; viewed="1770782_1200840"; __utmz=30149280.1553270495.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); ll="118281"; _pk_ses.100001.8cb4=*; __utma=30149280.1116038887.1553258504.1553270495.1561001711.3; __utmc=30149280; __utmt=1; ap_v=0,6.0; __yadk_uid=8ACD8TDbyZ5u3vvzrfBsgTPBHlA0BDFV; _pk_id.100001.8cb4=4df36ec4e19661d2.1561001704.1.1561001761.1561001704.; __utmb=30149280.2.10.1561001711'}headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:65.0'}res = requests.get(url,headers=headers, cookies=cookies)res.encoding = 'utf-8'  # 爬虫结果乱码,可以用UTF-8解码更正html = res.textreturn htmldef getPinglun(url):#获取页面上每个评论内容、点赞数与用户名html = getHtml(url)soup = BeautifulSoup(html, 'html.parser')duanpings = soup.findAll('div', class_='comment-item') #获取到所有评论itemfor duanping in duanpings:comment = {}comment['id'] = duanping.find("span",class_='comment-info').find('a').get_text()comment['comment'] = duanping.find("span", class_="short").get_text().replace('\n', '').replace(' ','')comment['vote'] = duanping.find("span", class_="votes").get_text()pinglun.append(comment)

得出结果如下图:

3.分析评论数据

用jieba对上爬取下来的评论数据进行切片处理,最后统计词汇生成csv与词云图

核心代码如下:

import jieba
import pandas as pd
from PIL import Image
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.font_manager as fmf = open('恶魔人crybaby.txt', 'r', encoding='utf-8') #读取小说内容
nov = f.read()
f.close()f1 =  open('stops_chinese.txt', 'r', encoding='utf-8')  #读取无用中文关键词
waste = f1.read()
f1.close()for i in [' ','\n']:nov = nov.replace(i, '')
#jieba添加词典与关键词
jieba.add_word("汤浅政明")
jieba.add_word("Netflix")
jieba.load_userdict('恶魔人关键字.txt')
novel=jieba.lcut(nov)  #用jieba切割nov#token过滤无用关键词
waste=waste.split('\n')
tokens = [token for token in novel if token not in waste]Set = set(tokens)#把tokens转换为集合方便字典统计
Dict = {}  # 创建一个字典统计词频
for i in Set:Dict[i] = tokens.count(i)
TopList = list(Dict.items())  # 转换成列表进行排序
TopList.sort(key = lambda x: x[1], reverse=True)  # 按照词频降序排列for i in range(20): #输出前20print(TopList[i])pd.DataFrame(data=TopList[0:20]).to_csv('恶魔人短评关键词top20.csv', encoding='utf-8')#生成词云图,进行字体变量配置后用空格分割内容
wl_split=' '.join(tokens)
bg = np.array(Image.open("shape.png"))
mywc = WordCloud(mask=bg,min_font_size=40,font_path='C:/Windows/Fonts/simkai.ttf' #中文处理,用系统自带的字体
).generate(wl_split)
my_font = fm.FontProperties(fname='C:/Windows/Fonts/simkai.ttf')
# image_colors = ImageColorGenerator(bg)
# mywc.recolor(color_func=image_colors)
plt.imshow(mywc, interpolation='bilinear')
plt.axis("off")
plt.tight_layout()
plt.show()
mywc.to_file("crybaby.png")

生成的csv文件:

保存到MySQL数据库

from pandas import DataFrame
import pandas as pd
import pymysql
from sqlalchemy import create_enginenewsdf = pd.read_csv(r'恶魔人短评关键词top20.csv', engine='python')
conInfo = r"mysql+pymysql://root:123456@localhost:3306/crybaby?charset=utf8"
engine = create_engine(conInfo,encoding='utf-8')
newsdf.to_sql(name='crybaby', con=engine, if_exists='append', index=False)

  保存后的MYSQL效果图

  

但是个人对pycharm生成的词云图不满意,所以后面去wordcloud网站生成自己喜欢的词云图,效果如下:

以恶魔人crybaby的海报图作素材,生成了我喜欢的词云形状,一眼看去人性、恶魔、人类、黄暴等有冲击力的词汇扑面而来,可见这是一部有宗教色彩,让观众探讨人性,令人深思的动画。

把数据进行图像化处理得出上图,好评率高达88.2%,总体来说这是一部好评甚多的一部深度优良动漫,不过根据词云图与个人观感,这部动漫观看时需要有健康稳固的三观才能正视这部上世纪佳作想表达的情感思想内核,在“黄暴“、”人性”、“恶魔”,“人类”等尖锐的词云关键词中却仍然能隐隐约约地看到“”爱”这一关键词,看出本作在黄暴与人性的恶劣中寻求人性真善美的那些光亮,人性有多恶劣,人性就有多高洁,作品在多处的残暴血腥描写中却流露出对生命的悲悯,因为悲伤,所以有爱。

补充:

  在6月19号时本人想提高爬虫爬取能力爬取更多数据,增加不同的user-agent与cookie、代理等防防爬功能时发现可能爬取的太频繁导致账号被永封。。IP地址也被记录了  

转载于:https://www.cnblogs.com/lqscmz/p/10837787.html

《恶魔人crybaby》豆瓣短评爬取相关推荐

  1. Python爬虫入门之豆瓣短评爬取

    采用工具pyCharm,python3,工具的安装在这就不多说了,之所以采用python3是因为python2只更新维护到2020年. 新建python项目 File-Settings-project ...

  2. 爬虫 |《破冰行动》豆瓣短评爬取

    如何爬取<破冰行动>豆瓣短评 1 前言 2 准备条件 3 Python实现 3.1 导入库 3.2 评论爬取 3.3 评分 3.4 有用人数 3.5 评论时间 3.6 用户首页网址 3.7 ...

  3. ⚡豆瓣告诉你《扫黑风暴》如何【短评爬取+词云】 ⚡

    ⚡豆瓣告诉你<扫黑风暴>如何[短评爬取+词云] ⚡ 一.前言 二.环境准备 三.具体实现 1.短评获取并保存 2.词云制作 3 成果 四.最后 ⚡豆瓣告诉你<扫黑风暴>如何[短 ...

  4. 豆瓣图书短评爬取(其中一本书的短评<前十页>)

    目标图书是"流浪地球"(只是一个图书编号不同) 爬取前十页,包括评论人员的名称.评论日期.评论等级.被赞个数.评论内容. 先看运行结果: (由于输出比较多直截首尾的图): 直接上代 ...

  5. html登录界面设计代码_Python登录豆瓣并爬取影评

    Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置.主题等) 浏览器行为跟踪(如跟踪分 ...

  6. python爬虫之xpath和lxml应用—爬取豆瓣评分爬取

    python爬虫之豆瓣评分爬取 1 第一步 获取网页源码 2 第二步 获取电影信息 3 第三步 保存数据 4 综合 ''' 需求:爬取电影的名字 评分 引言 详情页的url,每一页都爬取并且把数据保存 ...

  7. python豆瓣影评_教你用python登陆豆瓣并爬取影评

    教你用python登陆豆瓣并爬取影评 一起来 日常学python 这是我的第二篇原创文章 在上篇文章爬取豆瓣电影top250后,想想既然爬了电影,干脆就连影评也爬了,这样可以看看人们评价的电影,再加上 ...

  8. [python]豆瓣网爬取图书图片信息教程

    [python]豆瓣网爬取图书图片信息教程 1.准备工作:已经爬取了图片的URL,图书的相关信息,以便后期进行标记. 画圈处为图片链接和图书ID(用于匹配图片) 2.定义url数组和id数组 作用同上 ...

  9. 爬虫实战——豆瓣电影短评爬取

    目录 一.任务概述 心路历程 方案制定 二.正式开工 准备工作 处理 json 数据获取电影 id 处理短评 html 源码 三.全部代码 用Access后续处理 一.任务概述 爬取豆瓣电影中2020 ...

最新文章

  1. uchome 模板引擎
  2. GridView绑定时间
  3. VS2010属性表的建立与灵活运用
  4. MySQL修改用户(RENAME USER)
  5. 2021年程序员可以做哪些副业?
  6. js时间搓化为今天明天_来揭秘化妆品为啥会搓泥?
  7. CSS3 多列布局的跨列
  8. 集群服务器分析系统,集群服务器系统可扩展性的研究与实现
  9. “提速降费” 并非一蹴而就 矛头齐指运营商有失偏颇
  10. BZOJ 4766: 文艺计算姬 [矩阵树定理 快速乘]
  11. 完成一个简单的时间片轮转多道程序内核代码
  12. 元胞自动机python代码_Python实现元胞自动机(康威生命游戏)
  13. cropper.js使用
  14. 【LeetCode】592. 分数加减运算
  15. 在埋头写程序学技术的同时,有没有想到你们的老板和上司在搞什么?
  16. 计算机中常用标点符号的英文单词
  17. chia官方矿池常见问题
  18. c语言限速编程,一种基于c语言的列车限速曲线计算方法和装置的制造方法
  19. altium designer 制作元器件封装库
  20. [源码和文档分享]基于C#实现的RPG角色扮演类小游戏

热门文章

  1. 计算机屏幕坐标系转换,计算机图形窗口到视口坐标转换
  2. VueJS 概述与快速入门
  3. Android 仿QQ未读消息拖拽删除粘性控件效果
  4. displaytag标签相关知识(多篇文章)
  5. 蓝莓温室智能灌溉系统功能
  6. 分享3款音频分割器,操作简单
  7. linux 没有音频输出的解决方式
  8. 罗马复兴开源代码_社区主导的开源复兴
  9. Android自定义姓名头像
  10. python写微信公众号文章_python如何导出微信公众号文章