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上的源码

  • 相关阅读:
    使用tcmalloc编译启动时宕机
    使用tcmalloc编译出现undefined reference to `sem_init'
    使用AddressSanitizer做内存分析(一)——入门篇
    VIM-美化你的标签栏
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
    Entity Framework Code First (一)Conventions
  • 原文地址:https://www.cnblogs.com/HJhj/p/7682668.html
Copyright © 2011-2022 走看看