700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 爬虫+词云:爬取豆瓣电影top100的导演制作图云

爬虫+词云:爬取豆瓣电影top100的导演制作图云

时间:2018-12-02 06:18:42

相关推荐

爬虫+词云:爬取豆瓣电影top100的导演制作图云

前段时间做了一个关于豆瓣电影的爬虫,之后又写了一个陈奕迅歌词的词云制作,于是我想不如做一个关于豆瓣高分电影导演的词云试试,于是有了接下来这篇随笔。

首先,我需要知道豆瓣top100电影详情页面的url,以便爬取对应导演。在豆瓣电影top250界面

def get_urls(self):while(self.page<4):#得到当前页面的urlurl = self.cur_url.format(page = self.page*25)#获取当前页面所有内容text = self.Downloader.download(url)#将下载页面进行解析得到需要的urlurls = self.Parser.get_urls(text)#将当前获取的url加入url管理器中 self.URL_manager.add_urls(urls)#继续下一页的url添加self.page += 1

在得到top100电影详情界面的url之后,需要对这些详情页面下载,然后进行解析,我使用的是beautiulsoup,得到需要的导演名字。

def craw(self):print("开始搜集导演信息")datas = list()titles = list()#data = list()num = 0while self.URL_manager.has_new_url():try:#获取一个电影详情页面的urlurl = self.URL_manager.get_url()#将这个页面下载text = self.Downloader.download(url)#对这个页面进行解析,获得需要的内容data= self.Parser.get_datas(text)for item in data:datas.append(item)#titles.append(title)print("top %d:%s"%(num,item))num += 1except:print("craw failed!")#将数据存入本地 self.Outputer.save(datas)print("done")

爬虫部分的内容差不多了,接下来要做的就是对爬取的数据进行分析,得到词云

import wordcloudfrom PIL import Imageimport numpy as npimport jiebaimport jieba.analysefrom matplotlib import pyplot as pltclass WC_dires(object):"""docstring for WC_dirs"""def __init__(self):self.path = r"F:/Python_Program/douban/director/spider/directors.txt"def Read_text(self):lyric = ''try:f = open(self.path,'r')lyric = f.read()return lyricexcept:print("open file error!")return Nonefinally:f.close()def Analyse(self,text):results = jieba.analyse.extract_tags(text,topK = 100)return resultsdef Draw(self,results):image = np.array(Image.open(r'F:/Python_Program/douban/director/dires.png'))wc = wordcloud.WordCloud(background_color = 'white',max_words = 100,mask = image,stopwords = wordcloud.STOPWORDS,font_path = 'C:\Windows\Fonts\STZHONGS.TTF')cut_results = " ".join(results)wc.generate(cut_results)plt.figure()plt.imshow(wc)plt.axis("off")plt.show()def main():we = WC_dires()text = we.Read_text()data = we.Analyse(text)#for item in data:# print(item) we.Draw(data)if __name__ == "__main__":main()

附上github上的源码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。