前段时间做了一个关于豆瓣电影的爬虫,之后又写了一个陈奕迅歌词的词云制作,于是我想不如做一个关于豆瓣高分电影导演的词云试试,于是有了接下来这篇随笔。
首先,我需要知道豆瓣top100电影详情页面的url,以便爬取对应导演。在豆瓣电影top250界面
def get_urls(self): while(self.page<4): #得到当前页面的url url = self.cur_url.format(page = self.page*25) #获取当前页面所有内容 text = self.Downloader.download(url) #将下载页面进行解析得到需要的url urls = 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 = 0 while self.URL_manager.has_new_url(): try: #获取一个电影详情页面的url url = 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 += 1 except: print("craw failed!") #将数据存入本地 self.Outputer.save(datas) print("done")
爬虫部分的内容差不多了,接下来要做的就是对爬取的数据进行分析,得到词云
import wordcloud from PIL import Image import numpy as np import jieba import jieba.analyse from matplotlib import pyplot as plt class 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 lyric except: print("open file error!") return None finally: f.close() def Analyse(self,text): results = jieba.analyse.extract_tags(text,topK = 100) return results def 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:WindowsFontsSTZHONGS.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()