基于python+django+爬虫豆瓣电影数据可视化分析系统的设计与实现【附开发文档+代码讲解】

作者:雨晨源码
简介:java、微信小程序、安卓;定制开发,远程调试 代码讲解,文档指导,ppt制作
精彩专栏推荐订阅:在下方专栏
Java精彩实战毕设项目案例
小程序精彩项目案例
Python实战项目案例

文末获取源码

文章目录

  • 豆瓣电影分析系统-系统前言简介
  • 豆瓣电影分析系统-开发技术与环境
  • 豆瓣电影分析系统-功能介绍
  • 豆瓣电影分析系统-演示图片
  • 豆瓣电影分析系统-论文参考
  • 豆瓣电影分析系统-代码展示
  • 豆瓣电影分析系统-结语(文末获取源码)


本次文章主要是介绍豆瓣电影数据分析可视化系统 的功能,系统分为二个角色,分别是用户和管理员

豆瓣电影分析系统-系统前言简介

本文主要介绍了影视系统的爬虫与分析。影视是人们娱乐、放松心情的重要方式之一,因此对影视的分析具有重要的现实意义。通过采用Python编程语言,使用Django框架搭建影视系统,并使用相关技术实现对豆瓣网站的爬取、数据存储和可视化分析,可以更好地了解影视市场的状况和人们对影视的喜好,为影视制作和推广提供参考。

在技术实现方面,我们采用了Django框架和相关技术实现影视系统的爬虫与分析。Django框架是一种高效、稳定的Web应用程序框架,可以快速构建Web应用程序,并提供了完整的MVC架构和强大的数据库操作支持。我们还使用了django-threadlocals、pymysql、click、requests、xlrd和django-cors-headers等Python库,实现了豆瓣网站的数据爬取、存储和可视化分析。

通过编写爬虫程序,采集豆瓣网站上影视的相关信息,并将这些信息存储到数据库中。然后,我们使用Python中的数据分析工具,如pandas、matplotlib等,对数据进行可视化分析,以便更好地了解影视市场的现状和人们对影视的喜好。最后,我们将分析结果呈现在Web界面上,使用户可以更加直观地了解影视市场和人们对影视的评价,从而更好地了解影视市场的趋势和人们的需求。

豆瓣电影分析系统-开发技术与环境

  • 开发语言:Python
  • 后端框架:Django、爬虫
  • 前端:vue
  • 数据库:MySQL
  • 系统架构:B/S
  • 开发工具:pycharm

豆瓣电影分析系统-功能介绍

2个角色:用户/管理员(亮点:爬虫+echarts可视化)

用户:用户登录进入系统可以实现对电影、电影资讯、后台管理等进行操作。
管理员:管理员是系统中的核心用户,管理员登录后,可以对后台系统进行管理。主要包括有个人中心、电影管理、用户管理、系统管理等功能。
基于python+django+爬虫豆瓣电影数据可视化分析系统的设计与实现【附开发文档+代码讲解】_第1张图片

豆瓣电影分析系统-演示图片

1.用户端页面:
☀️用户首页☀️

☀️电影列表☀️

2.管理员端页面:
☀️可视化大屏☀️

基于python+django+爬虫豆瓣电影数据可视化分析系统的设计与实现【附开发文档+代码讲解】_第2张图片

☀️电影管理☀️
基于python+django+爬虫豆瓣电影数据可视化分析系统的设计与实现【附开发文档+代码讲解】_第3张图片

☀️用户管理☀️
基于python+django+爬虫豆瓣电影数据可视化分析系统的设计与实现【附开发文档+代码讲解】_第4张图片

☀️电影资讯管理☀️
基于python+django+爬虫豆瓣电影数据可视化分析系统的设计与实现【附开发文档+代码讲解】_第5张图片

豆瓣电影分析系统-论文参考

基于python+django+爬虫豆瓣电影数据可视化分析系统的设计与实现【附开发文档+代码讲解】_第6张图片

豆瓣电影分析系统-代码展示

1.爬虫解析【代码如下(示例):】

 # 列表解析
    def parse(self, response):
        
        _url = urlparse(self.spiderUrl)
        self.protocol = _url.scheme
        self.hostname = _url.netloc
        plat = platform.system().lower()
        if plat == 'windows_bak':
            pass
        elif plat == 'linux' or plat == 'windows':
            connect = self.db_connect()
            cursor = connect.cursor()
            if self.table_exists(cursor, 'by8ev_movie') == 1:
                cursor.close()
                connect.close()
                self.temp_data()
                return
​
        list = response.css('div#nowplaying ul.lists li.list-item, div#upcoming ul.lists li.list-item')
        
        for item in list:
​
            fields = MovieItem()
​
​
​
            fields["laiyuan"] = self.remove_html(item.css('li[class="poster"] a::attr(href)').extract_first())
​
            detailUrlRule = item.css('li[class="poster"] a::attr(href)').extract_first()
            if self.protocol in detailUrlRule:
                pass
            elif detailUrlRule.startswith('//'):
                detailUrlRule = self.protocol + ':' + detailUrlRule
            else:
                detailUrlRule = self.protocol + '://' + self.hostname + detailUrlRule
                fields["laiyuan"] = detailUrlRule
​
            yield scrapy.Request(url=detailUrlRule, meta={'fields': fields},  callback=self.detail_parse)
​
​
    # 详情解析
    def detail_parse(self, response):
        fields = response.meta['fields']
​
        try:
            if '(.*?)' in '''div[id="info"] span:nth-child(1) span a::text''':
                fields["daoyan"] = re.findall(r'''div[id="info"] span:nth-child(1) span a::text''', response.text, re.S)[0].strip()
            else:
                if 'daoyan' != 'xiangqing' and 'daoyan' != 'detail' and 'daoyan' != 'pinglun' and 'daoyan' != 'zuofa':
                    fields["daoyan"] = self.remove_html(response.css('''div[id="info"] span:nth-child(1) span a::text''').extract_first())
                else:
                    fields["daoyan"] = emoji.demojize(response.css('''div[id="info"] span:nth-child(1) span a::text''').extract_first())
        except:
            pass
​
​
        try:
            if '(.*?)' in '''div[id="info"] br~span span[class="attrs"] a::text''':
                fields["bianju"] = re.findall(r'''div[id="info"] br~span span[class="attrs"] a::text''', response.text, re.S)[0].strip()
            else:
                if 'bianju' != 'xiangqing' and 'bianju' != 'detail' and 'bianju' != 'pinglun' and 'bianju' != 'zuofa':
                    fields["bianju"] = self.remove_html(response.css('''div[id="info"] br~span span[class="attrs"] a::text''').extract_first())
                else:
                    fields["bianju"] = emoji.demojize(response.css('''div[id="info"] br~span span[class="attrs"] a::text''').extract_first())
        except:
            pass
​
​
        try:
            if '(.*?)' in '''div[id="info"] span[class="actor"] span[class="attrs"] a::text''':
                fields["zhuyan"] = re.findall(r'''div[id="info"] span[class="actor"] span[class="attrs"] a::text''', response.text, re.S)[0].strip()
            else:
                if 'zhuyan' != 'xiangqing' and 'zhuyan' != 'detail' and 'zhuyan' != 'pinglun' and 'zhuyan' != 'zuofa':
                    fields["zhuyan"] = self.remove_html(response.css('''div[id="info"] span[class="actor"] span[class="attrs"] a::text''').extract_first())
                else:
                    fields["zhuyan"] = emoji.demojize(response.css('''div[id="info"] span[class="actor"] span[class="attrs"] a::text''').extract_first())

2.数据缓存【代码如下(示例):】

# 数据缓存源
   def temp_data(self):
​
       connect = self.db_connect()
       cursor = connect.cursor()
       sql = '''
           insert into movie(
               daoyan
               ,bianju
               ,zhuyan
               ,leixing
               ,diqu
               ,yuyan
               ,shangyingriqi
               ,pianchang
               ,pingfen
               ,xiangqing
               ,fengmian
               ,mingcheng
               ,laiyuan
           )
           select
               daoyan
               ,bianju
               ,zhuyan
               ,leixing
               ,diqu
               ,yuyan
               ,shangyingriqi
               ,pianchang
               ,pingfen
               ,xiangqing
               ,fengmian
               ,mingcheng
               ,laiyuan
           from by8ev_movie
           where(not exists (select
               daoyan
               ,bianju
               ,zhuyan
               ,leixing
               ,diqu
               ,yuyan
               ,shangyingriqi
               ,pianchang
               ,pingfen
               ,xiangqing
               ,fengmian
               ,mingcheng
               ,laiyuan
           from movie where
            movie.daoyan=by8ev_movie.daoyan
           and movie.bianju=by8ev_movie.bianju
           and movie.zhuyan=by8ev_movie.zhuyan
           and movie.leixing=by8ev_movie.leixing
           and movie.diqu=by8ev_movie.diqu
           and movie.yuyan=by8ev_movie.yuyan
           and movie.shangyingriqi=by8ev_movie.shangyingriqi
           and movie.pianchang=by8ev_movie.pianchang
           and movie.pingfen=by8ev_movie.pingfen
           and movie.xiangqing=by8ev_movie.xiangqing
           and movie.fengmian=by8ev_movie.fengmian
           and movie.mingcheng=by8ev_movie.mingcheng
           and movie.laiyuan=by8ev_movie.laiyuan
           ))
           limit {0}
       '''.format(random.randint(20,30))
​
       cursor.execute(sql)
       connect.commit()
​
       connect.close()

豆瓣电影分析系统-结语(文末获取源码)


Java精彩实战毕设项目案例
小程序精彩项目案例
Python实战项目集
如果大家有任何疑虑,欢迎在下方位置详细交流。

你可能感兴趣的:(Python实战项目集,python,django,爬虫)