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

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

首先,我需要知道豆瓣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上的源码

posted @ 2017-10-17 16:57  HHello_World  阅读(1426)  评论(0编辑  收藏  举报