当前位置: 首页 > news >正文

102302106陈昭颖食鲜配智厨:数据采集项目实践总结

一,项目背景

项目围绕“食鲜配・智厨”项目展开,该项目聚焦现代都市人群在日常饮食过程中普遍存在的“买菜难、配菜烦、做饭复杂、营养不均衡”等一系列现实痛点,致力于构建一个覆盖“食材选购—菜谱搭配—智能烹饪—健康管理”全过程的一体化智能饮食服务平台。项目以“数据驱动的个性化饮食服务”为核心理念,通过技术手段降低用户在饮食决策与烹饪执行中的认知与操作成本,提升生活品质与健康水平。

二,任务内容

1.爬取所有食材和食材总类的内容

本次项目我爬取的食材网站是苏宁超市https://chaoshi.suning.com/?safp=d488778a.13701.0.812ea3aef7&safpn=10007 ,爬取的食材种类是该网页左侧的相关内容
image
以及红圈食材的具体食材信息:(以水果为例子)
image
利用前面学习的爬虫,我是利用selenium和xpath的爬取方法对各个商品的名字,价格,和图片的url进行爬取
image
相关核心代码:

    # 1. 商品名称(适配两种页面结构)title = "".join(li.xpath('.//div[contains(@class, "title-selling-point")]/a//text() | .//div[2]/div[2]/a//text()')).replace("\n", "").strip()dic["title"] = title if title else "未知名称"# 2. 商品价格(适配拆分的 <i> 标签)price_parts = li.xpath('.//div[2]/div[1]/span//i//text() | .//div[contains(@class, "price-box")]/span//i//text()')if price_parts:price = "".join(price_parts).replace("\n", "").strip()else:price = "".join(li.xpath('.//div[contains(@class, "price-box")]/span[1]//text()')).replace("\n", "").strip()dic["price"] = price if price else "0"# 3. 商品图片(补全协议)img_link = li.xpath('.//div[contains(@class, "img-block")]/a/img/@src | .//img[starts-with(@id, "-") or contains(@src, ".jpg")]/@src')if img_link:img_url = img_link[0].strip()if img_url and not img_url.startswith(('http:', 'https:')):img_url = 'https:' + img_urldic["img_link"] = img_urlelse:dic["img_link"] = ""# 过滤无效数据if dic["title"] == "未知名称" or dic["price"] in ("0", ""):continuedic["category"] = categoryproducts.append(dic)

爬取结果:
image

2.更改第二类前端封面显示

由于爬取的食材顺序不同,前端显示的也不一样,所以为了界面美观我们固定封面显示的商品
我更改了相关view.py的代码和html码
image
image
image

3.录制项目演示视频

image

三,心得体会

本次食鲜配·智厨的项目在组长诗怡的带领之下,我们分工明确并且有计划有目标的完成每个时间段的任务,并且我还运用了前面所学习的爬虫知识点完成所分配给我的任务,有问题我们也一起开会探讨,同时大家也互帮互助,我感受到大家都非常团结,并且我自己也收获良多

http://www.jsqmd.com/news/125648/

相关文章:

  • 图解说明Keil5在工业控制系统的安装流程
  • 一文说清上位机在Modbus协议中的角色与作用
  • 深入理解 Java 获取 Class 对象的四种方式及类加载机制
  • Arduino IDE设置中文的通俗解释与步骤
  • AUTOSAR网络管理错误处理机制的配置实践详解
  • 深度剖析ES6语法:Iterator遍历器工作原理
  • Flutter 实现一个容器内部元素可平移、缩放和旋转等功能(七)
  • MySQL死锁排查指南
  • 新手必看:Multisim14.0虚拟电源设置通俗解释
  • 使用libiconv-win-build在Windows平台下编译libiconv
  • pycharm全项目搜索ctrl+shift+F失灵
  • Arduino IDE语言选项修改深度剖析步骤
  • 树莓派5安装ROS2配置步骤完整示例
  • Flutter 实现一个容器内部元素可平移、缩放和旋转等功能(八)
  • 如何计算 DAX 中多个周期的移动平均
  • AES 与 SM4 加密算法:深度解析与对比
  • 如何挑战自己的分析,避免他人挑战
  • Arduino Nano中ATmega328P的PWM输出配置实战案例
  • 第十章 形状与画刷
  • MDK在分布式控制系统中的实践案例
  • 驱动开发中WinDbg分析DMP蓝屏文件的完整指南
  • 基于minidump的系统崩溃分析:手把手教程
  • 如何使用您的 iPhone 免费与任何开源 LLM 进行聊天
  • 2025.12.22总结
  • 任务队列满了怎么办?四种线程池拒绝策略
  • 串口通信调试技巧在上位机软件开发中的应用
  • 使用CANoe进行UDS诊断测试的实战案例解析
  • Packet Tracer汉化完整指南:适用于初学者的配置流程
  • 线程池优雅关闭:线程池生命周期管理:四种关闭策略的实战对比
  • 数据库性能优化实战:从工程架构到SQL深度调优的全面指南