博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅🍅**感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。**🍅
1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅
1、项目介绍
技术栈
Python语言、Django框架、Scrapy爬虫框架、Echarts可视化,采集下厨房网站数据。
功能模块
-
推荐美食
-
美食用料排行榜分析
-
美食分类占比分析
-
饮食科普
-
美食分类
-
美食详情信息
-
美食详情做法
-
后台数据管理
项目介绍
本项目基于指定技术栈,爬取下厨房网站本周最受欢迎及新秀食谱数据,经脱敏、清洗等预处理后,提取食谱名称、用料、做法等关键信息。系统包含多个功能模块,可实现美食推荐、分类、详情查看,以及用料排行、分类占比的可视化分析,同时提供饮食科普和后台数据管理功能。研究过程结合文献资料法、调查法、分析归纳法,挖掘用户对美食的关注点,为用户提供全面的美食数据服务与可视化体验。
2、项目界面
(1)推荐美食
该页面是美食数据采集与可视化系统的主界面,可通过分类或关键词搜索美食,以列表形式展示美食的图文、评分及食材信息,同时提供美食分类、用料排行可视化、推荐美食、饮食科普等功能模块的切换入口。

(2)美食用料排行榜分析
该页面是美食数据采集与可视化系统的美食用料排行可视化界面,以柱状图形式展示各类食材的使用频次排行,同时保留美食数据、美食分类、推荐美食、饮食科普等其他功能模块的切换入口,方便用户进行数据查看与功能跳转。

(3)美食分类占比分析
该页面是美食数据采集与可视化系统的美食分类占比可视化界面,以饼图形式展示各类美食的数量占比,支持鼠标悬停查看具体分类数据,同时保留美食数据、美食分类、推荐美食、饮食科普等其他功能模块的切换入口,方便用户进行功能跳转与数据查看。

(4)饮食科普
该页面为美食数据采集与可视化系统的科普页面,左侧导航栏包含美食数据、美食分类、推荐美食、饮食科普、美食分类占比可视化、美食用料排行可视化等功能模块,顶部设有分类筛选与美食搜索栏,右侧展示饮食科普类文章列表,包含文章标题、配图、发布时间及互动数据,底部具备分页导航功能。

(5)美食分类
该页面为美食数据采集与可视化系统的美食分类页面,左侧导航栏集成美食数据、推荐美食、饮食科普、美食分类占比可视化、美食用料排行可视化等功能模块,顶部设有分类筛选与美食搜索栏,主区域展示所有美食分类并提供分类搜索功能,可快速定位对应美食分类。

(6)美食详情信息
该页面为美食数据采集与可视化系统的美食详情页,顶部显示用户信息与操作反馈提示,页面主体展示美食名称、收藏操作按钮、美食图片、综合评分、发布作者、简介及相关标签,下方还将呈现用料等详细内容,整体实现了美食详情展示与收藏交互功能。

(7)美食详情做法
该页面为美食数据采集与可视化系统的美食详情页,顶部显示用户信息与收藏操作反馈提示,主体部分依次展示美食综合评分、作者信息、美食简介、相关标签,下方呈现美食用料清单与分步做法及步骤配图,完整承载了美食详情展示与内容浏览的功能。

(8)后台数据管理
该页面为美食数据采集与可视化系统的后台管理页面,左侧导航栏集成首页、新闻管理、美食数据、认证和授权等功能模块,主区域以列表形式展示美食信息,包含美食封面、标题、分类、作者、评分、用料及标签等内容,支持对美食数据进行查看与管理操作。

3、项目说明
一、技术栈简要说明
系统后端采用 Python 语言与 Django 框架构建,数据采集使用 Scrapy 爬虫框架定向抓取下厨房网站本周最受欢迎及新秀食谱数据。前端页面通过 HTML 进行展示,可视化部分借助 Echarts 图表库实现柱状图、饼图等多种图形渲染。数据经脱敏、清洗等预处理后提取食谱名称、用料、做法等关键信息并存储于数据库。
二、功能模块详细介绍
· 推荐美食模块
作为系统主界面,支持通过分类或关键词搜索美食,以列表形式展示美食的图文、评分及食材信息,为用户提供个性化的美食浏览入口,同时集成美食分类、用料排行可视化、推荐美食、饮食科普等模块的切换导航。
· 美食用料排行榜分析模块
以柱状图形式展示各类食材的使用频次排行,直观呈现美食制作中常用食材的分布情况,帮助用户了解热门食材与烹饪趋势,支持图表交互与功能模块跳转。
· 美食分类占比分析模块
通过饼图展示各类美食的数量占比,支持鼠标悬停查看具体分类数据,清晰呈现不同菜系或品类在整体食谱中的分布结构,便于用户把握美食类型构成。
· 饮食科普模块
以文章列表形式展示饮食科普类内容,包含文章标题、配图、发布时间及互动数据,顶部设有分类筛选与美食搜索栏,底部具备分页导航功能,为用户提供饮食健康知识与烹饪常识。
· 美食分类模块
集成所有美食分类的展示与搜索功能,用户可通过分类搜索快速定位对应美食类别,左侧导航栏整合美食数据、推荐美食、饮食科普等模块入口,实现高效分类导航。
· 美食详情信息模块
展示美食的完整详情,包含美食名称、收藏操作按钮、美食图片、综合评分、发布作者、简介及相关标签,下方呈现用料等详细内容,实现美食详情展示与收藏交互功能。
· 美食详情做法模块
在详情信息基础上进一步呈现美食用料清单与分步做法及步骤配图,完整承载食谱制作流程的展示,方便用户按步骤学习烹饪。
· 后台数据管理模块
提供美食信息的列表化管理界面,包含美食封面、标题、分类、作者、评分、用料及标签等内容,支持对美食数据进行查看、编辑、删除等管理操作,同时集成首页、新闻管理、认证和授权等功能模块,实现系统数据的集中管控。
三、项目总结
本系统是基于 Python 与 Django 开发的美食数据采集与可视化平台,聚焦下厨房网站食谱数据。系统通过 Scrapy 爬虫框架定向抓取本周最受欢迎及新秀食谱信息,经脱敏、清洗等预处理后提取食谱名称、用料、做法等关键内容并存储于数据库。平台提供推荐美食、美食分类、饮食科普、美食详情信息与做法展示等功能模块,满足用户浏览、搜索与学习烹饪的需求。美食用料排行榜分析模块以柱状图呈现食材使用频次,美食分类占比分析模块通过饼图展示各类美食数量结构,可视化部分借助 Echarts 实现直观数据呈现。后台数据管理模块支持美食信息的集中维护,为用户提供全面的美食数据服务与可视化体验。
4、核心代码
python
import scrapy
# from scrapy.downloadermiddlewares.retry import RetryMiddleware
keys = ['from_cat', 'from_link', 'cover_small', 'title', 'link', 'id', 'author', 'author_link', 'author_id', 'score', 'madeit',
'components', 'author_avatar', 'cover_big', 'desc_html', 'categories', 'steps_text', 'ings', 'steps_html', 'tip']
class XiachufangSpider(scrapy.Spider):
name = 'xiachufang'
allowed_domains = []
start_url = "https://www.xiachufang.com/category/"
custom_settings = {
"RETRY_HTTP_CODES": [429, 503],
"RETRY_TIMES": 100,
}
def start_requests(self):
yield scrapy.Request(self.start_url, callback=self.parse_categories)
def parse_categories(self, response):
for a in response.css('li[id^="cat"] > a'):
cat = a.xpath("./text()").extract_first().strip()
link = response.urljoin(a.xpath("./@href").extract_first())
page = 1
link_format = link+"?page={}"
meta = dict(item=dict(from_cat=cat, from_link=link),
link=link_format, page=page)
yield scrapy.Request(link, meta=meta, callback=self.parse_list)
def parse_list(self, response):
meta = response.meta
for div in response.css("div.recipe"):
item = dict(meta['item'])
item['cover_small'] = div.xpath(
".//img/@data-src").extract_first() or div.xpath(".//img/@src").extract_first()
item['title'] = div.xpath(
'.//p[@class="name"]/a/text()').extract_first().strip()
item['link'] = response.urljoin(div.xpath(
'.//p[@class="name"]/a/@href').extract_first().strip())
item['id'] = int(
div.xpath('.//p[@class="name"]/a/@href').re_first("\d+"))
item['author'] = div.xpath(
'.//p[@class="author"]/a/text()').extract_first().strip()
item['author_link'] = response.urljoin(div.xpath(
'.//p[@class="author"]/a/@href').extract_first().strip())
item['author_id'] = int(
div.xpath('.//p[@class="author"]/a/@href').re_first("\d+"))
item['score'] = float(div.xpath(
'.//span[@class="score bold green-font"]/text()').extract_first() or 0)
item['madeit'] = int(div.xpath(
'.//span[@class="bold score"]/text()').extract_first() or 0)
item['components'] = ';'.join(
div.xpath('.//p[@class="ing ellipsis"]/*/text()').extract())
meta['item'] = item
yield scrapy.Request(item['link'], callback=self.parse_detail, meta=meta)
# 翻页
meta['page'] += 1
url = meta['link'].format(meta['page'])
yield scrapy.Request(url, meta=meta, callback=self.parse_list)
def parse_detail(self, response):
meta = response.meta
item = dict(meta['item'])
item['author_avatar'] = response.urljoin(
response.css("div.author img::attr(src)").extract_first())
item['cover_big'] = response.css(
"div.cover.image > img::attr(src)").extract_first()
item['desc_html'] = response.xpath(
'//div[@class="desc mt30"]').extract_first()
item['categories'] = ";".join(response.xpath(
'//div[@class="recipe-cats"]/*/text()').extract())
item['steps_text'] = response.xpath(
'//meta[@name="description"]/@content').extract_first()
item['ings'] = response.xpath(
'//div[@class="ings"]').extract_first()
item['steps_html'] = response.xpath(
'//div[@class="steps"]').extract_first()
item['tip'] = response.xpath(
'//div[@class="tip"]').extract_first()
yield item