zoukankan      html  css  js  c++  java
  • 爬虫+词云:爬取豆瓣电影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: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()

    附上github上的源码

  • 相关阅读:
    基本控件文档-UIView属性---iOS-Apple苹果官方文档翻译
    基本控件文档-UITextField属性---iOS-Apple苹果官方文档翻译
    vue后台管理权限篇
    JavaScript call、apply、bind的用法
    Array map()方法
    markdown常用语法总结
    webpack配置说明
    Object.prototype.toString.call(value)
    前后端数据交互和前端数据展示
    vue常用的传值方式
  • 原文地址:https://www.cnblogs.com/HJhj/p/7682668.html
Copyright © 2011-2022 走看看