
python美食数据采集推荐可视化系统 Django框架 scrapy爬虫框架 Echarts可视化 下厨房网站 deepseek 建议收藏 大数据毕业设计(源码)✅
python美食数据采集推荐可视化系统 Django框架 scrapy爬虫框架 Echarts可视化 下厨房网站 deepseek 建议收藏 大数据毕业设计(源码)✅
博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅
2、大数据毕业设计:2025年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅
🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、项目介绍
技术栈:
Python语言、Django框架、scrapy爬虫框架、Echarts可视化、下厨房网站爬虫数据
1)数据采集:
本应用采集目前的下厨房网站(https://www.xiachufang.com/)的食谱内容,对本周最受欢迎的食谱和新秀食谱进行爬取,对采集获得的食物制作方法数据进行初步处理,得到原始文本的食谱数据,包含了脱敏处理后的食谱名称、用料、做法、时间,食物图片等内容,根据分析的需要,从数据中抽取出“具体做法”一列。
2、项目界面
(1)推荐美食
(2)美食用料排行榜分析
(3)美食分类占比分析
(4)饮食科普
(5)美食分类
(6)美食详情信息
(7)美食详情做法
(8)后台数据管理
3、项目说明
1)数据采集:
本应用采集目前的下厨房网站(https://www.xiachufang.com/)的食谱内容,对本周最受欢迎的食谱和新秀食谱进行爬取,对采集获得的食物制作方法数据进行初步处理,得到原始文本的食谱数据,包含了脱敏处理后的食谱名称、用料、做法、时间,食物图片等内容,根据分析的需要,从数据中抽取出“具体做法”一列。
(2)数据预处理:
原始数据中存在异常值、重复值、系统自动推荐等数据,这部分数据价值含量低、数据结构混乱,严重影响数据挖掘模型的执行效率,导致挖掘结果的偏差,所以进行数据清洗是必不可少的。结合原始数据的具体情况,数据预处理采用文本去重、机械压缩去词和短句删除。
(3)中文分词及用户关注点:
中文分词是将句子中汉字按照序列切成一个个单独的中文词语,结巴词库提供了精确模式、全模式和搜索引擎模式三种分词模式,是Python中一个重要的第三方中文分词函数库。Jieba词库能够支持中文简体和繁体,在分析用户评论中能够对文本评论数据提取关键词。
用户关注点是用户对某一商品特定属性的关注点,反映客户在某种商品上的聚焦点,关注某一特性的用户数量越高,说明该商品的这一属性对用户来说越重要,一般是食谱标题、所用原料、具体做法、食物图片。分析利用Jieba词库,结合用户用词习惯,设置以“家常菜”、“快手菜”、“下饭菜”、”早餐”、“减肥”、“烘焙”、“小吃”、“汤羹”八个为用户常关注的属性。
(二)研究的方法:
⑴文献资料法:
利用图书馆以及互联网等方式查询相关的文献资料,梳理出相关的知识点,加以分析与研究。它是有目的、有计划、系统地收集有关研究对象的方法。
⑵调查法:
为了更好地了解食物推荐系统应用的发展以及真实现状,在同学、朋友、亲人以及路人等进行现场的询问,并做好记录,看观察对象对食物食材以及制作方面的喜好,根据现场调查,进行剖析,深入研究。
⑶分析归纳法:
研究分析查阅的文献资料,归纳总结其研究内容并合理分类。根据比较研究及案例分析的结果,总结归纳出食物推荐系统应用的发展中好的做法和经验。
4、核心代码
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
5、源码获取方式
🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看【用户名】、【专栏名称】就可以找到我啦🍅
感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻
更多推荐
所有评论(0)