相信大家的童年一定离不开动漫,无论你是哪个年龄段的,或多或少都听说过《灌篮高手》《机器猫》《名侦探柯南》,听到这一部部经典的动漫作品的名字,总有一部动漫打开了你的回忆之窗。今天我们就来爬点好玩的,追忆一下我们远去的童年记忆……
童年动漫
爬虫,也称为网络蜘蛛,随着互联网的发展我们对数据量、信息量的需求越来越大,所以爬虫这种智能工具的出现为我们的生活带来了便利,也为数据的获取提供了方便。那今天我们所爬取的这几部动漫采用的编程语言为Python,因为Python这门语言在实际操作的过程中相对简单与快捷,所以我们的童年回忆就由Python来为我们打开!
爬虫
我们来看一下要爬取的动漫
一.爬虫部分
本文主要使用requests模块解析网页,xpath来定位想要抓取的信息,线上代码:
import requestsfrom bs4 import BeautifulSoupimport codecsfrom lxml import etreeimport pandas as pdimport re
以上部分主要是把常用的模块载入,BeautifulSoup是不错的解析方法,但是感觉相对本次用到的xpath,后者更方便快捷,非常适合初学者
## 封装一个解析网页的函数def download_page(url): headers = { 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36' } data = requests.get(url, headers=headers).content return data
这里的'User-Agent'是用来伪装成浏览器,这样我们的爬虫就被伪装成了一次网页访问而不被网站轻易封掉。
## 豆瓣搜索喜爱的动盘,找到相关评论页url='https://movie.douban.com/subject/1998799/comments?start=' #灌篮高手url='https://movie.douban.com/subject/1463371/comments?start=' #名侦探柯南url='https://movie.douban.com/subject/1782004/comments?start=' #名侦探柯南com=[]name=[]date=[]time=[]rating=[]good=[]for j in ['h','m','l']: #评分高、中、低,避免没有打分的情况 for i in range(0,200,20): hxg=download_page(url+str(i)+'&limit=20&sort=new_score&status=P&percent_type='+j) html=etree.HTML(hxg) com=com+html.xpath('''.//span[@class='short']/text()''') name=name+html.xpath('''.//span[@class='comment-info']/a/text()''') date=html.xpath('''.//span[contains(@class,'comment-time')]''') for i in date: time.append(i.attrib.get('title')) star=html.xpath('''.//span[contains(@class,'allstar')]''') for i in star: rating.append(i.attrib.get('title')) good=good+html.xpath('''.//span[@class='votes']/text()''')
这里的关键就是上文提到的xpath语法,可以快速实现准确定位你感兴趣的信息
二.分析部分
分别爬取我们感兴趣的动漫作品评论,形成不同的数据框后concat到一起
data1['record']='灌篮高手'data2['record']='名侦探柯南'data3['record']='哆啦A梦'# 合并dataframedata=pd.concat([data1,data2,data3])data['num']=1data['good']=data['good'].apply(str)data['year']=data['time'].apply(lambda x:str(x)[0:4])data['month']=data['time'].apply(lambda x:str(x)[0:7])data['date']=data['time'].apply(lambda x:str(x)[0:10])
三.词云
爬取悼的评论最能体现小伙伴们对作品的认知,那么我们来看一下这些作品的评论词云
首先还是载入所需要的各种模块
from os import pathfrom wordcloud import WordCloud, ImageColorGeneratorimport jiebaimport pandas as pdimport numpy as npfrom scipy.misc import imreadfrom PIL import Image
这里同样采用封装函数的方式,可以更便捷的批量处理,其中包括jieba分词,以及去停用词
def jieba_go(data_list): line=data_list.apply(str) #导入要分词的list #list无法完成jieba分词,将list转化为str line=','.join(line) ## jieba 分词 word_list=jieba.cut(line,cut_all=False) word_cut=list(word_list) ## 停用词表 stoplist=open('wordclean_list.txt',encoding="gbk") stopwords = [line.strip() for line in open('wordclean_list.txt', 'r',encoding="gbk").readlines()] for add in ['动画','漫画','动漫','喜欢']: # 手动添加想要去掉的词 stopwords.append(add) # 去停用词 final=[] for seg in word_cut: if seg not in stopwords: final.append(seg) type(final) final=','.join(final) return final
完成jieba分词、去停用词后形成打碎的字符串,我们就可以画词云了,注意调整展示图片
def wdcloud_go(final): pic='樱木花道.jpg' #pic='柯南.jpeg' #pic='机器猫.jpeg' cloud_mask = np.array(Image.open(pic)) back_color = imread(pic) image_colors = ImageColorGenerator(back_color) wd=WordCloud(font_path='苹方黑体-中黑-简.ttf', background_color='white', max_words=20000, max_font_size=200, random_state=10, width=800, # 图片的宽 height=500, #图片的长 mask=cloud_mask ) WD=wd.generate(final) import matplotlib.pyplot as plt WD.to_file('jay_wordcloud.jpg') # 显示词云图片 plt.figure(figsize=(5,5),dpi=150) plt.axis('off') #去掉坐标轴 plt.imshow(WD.recolor(color_func=image_colors)) plt.show()
基本上大功告成!如果大家喜欢这类的文章,我可以在以后的文章中多多介绍我曾经在人工智能领域做过的项目,让大家重新认识一下计算机科学界那些非常有趣的创意和生活!!!
我是90后,逗比理工男,经常在人工智能、计算机科学领域工作,我将在我的文章中为大家带来更为科学的数据奥秘!