爬蟲+詞雲:爬取豆瓣電影top100的導演制作圖雲
阿新 • • 發佈:2017-10-17
ray 爬取 open tex 下載頁面 down app zhong form
前段時間做了一個關於豆瓣電影的爬蟲,之後又寫了一個陳奕迅歌詞的詞雲制作,於是我想不如做一個關於豆瓣高分電影導演的詞雲試試,於是有了接下來這篇隨筆。
首先,我需要知道豆瓣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:\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上的源碼
爬蟲+詞雲:爬取豆瓣電影top100的導演制作圖雲