作者:雨晨源码
简介: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界面上,使用户可以更加直观地了解影视市场和人们对影视的评价,从而更好地了解影视市场的趋势和人们的需求。
2个角色:用户/管理员(亮点:爬虫+echarts可视化)
用户:用户登录进入系统可以实现对电影、电影资讯、后台管理等进行操作。
管理员:管理员是系统中的核心用户,管理员登录后,可以对后台系统进行管理。主要包括有个人中心、电影管理、用户管理、系统管理等功能。
1.用户端页面:
☀️用户首页☀️
☀️电影列表☀️
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实战项目集
如果大家有任何疑虑,欢迎在下方位置详细交流。