毕业设计:python美食数据采集推荐可视化系统 Django框架 scrapy爬虫框架 Echarts可视化 下厨房网站 大数据✅

2024-01-21

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业 毕业设计 项目实战6年之久,选择我们就是选择放心、选择安心毕业✌感兴趣的可以先收藏起来,点赞、关注不迷路✌

毕业设计:2023-2024年计算机毕业设计1000套(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕业设计选题汇总

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、源码获取方式

???? 由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。 ????

点赞、收藏、关注,不迷路, 下方查看 ???????? 获取联系方式 ????????

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

毕业设计:python美食数据采集推荐可视化系统 Django框架 scrapy爬虫框架 Echarts可视化 下厨房网站 大数据✅ 的相关文章

  • 如何计算 pandas datetime 对象的均值和方差?

    如何计算 YYYY MM DD 形式的 python 日期时间对象的汇总统计数据 均值和标准差 我想对具有不同 ID 的不同日期时间对象组执行此操作 数据如下 import datetime as dt df pd DataFrame Da
  • 如何在 Matplotlib 饼图周围绘制箭头以将每个标签指向圆圈中各自的部分?

    我一直在用 Matplotlib 绘制一些图表 我有一个饼图 想要在图表周围绘制箭头 使每个标签都指向图表 我有一个例子 这是我当前的代码 import matplotlib pyplot as plt plt rcParams font
  • 为什么 dataclasses.astuple 返回类属性的深层副本?

    在下面的代码中astuple函数正在执行数据类的类属性的深层复制 为什么它不能产生与函数相同的结果my tuple import copy import dataclasses dataclasses dataclass class Dem
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • Django Rest Framework 是否有第三方应用程序来自动生成 swagger.yaml 文件?

    我有大量的 API 端点编写在django rest framework并且不断增加和更新 如何创建和维护最新的 API 文档 我当前的版本是 Create swagger yaml文件并以某种方式在每次端点更改时自动生成 然后使用此文件作
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • Python 内置的 super() 是否违反了 DRY?

    显然这是有原因的 但我没有足够的经验来认识到这一点 这是Python中给出的例子docs http docs python org 2 library functions html super class C B def method se
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • 将索引与值交换的最快方法

    考虑pd Series s s pd Series list abcdefghij list ABCDEFGHIJ s A a B b C c D d E e F f G g H h I i J j dtype object 交换索引和值并
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是

随机推荐