You need to enable JavaScript to run this app. 如何将含图片列的爬取DataFrame写入Django SQLite模型及代码存放位置?
优惠活动
大模型
产品
解决方案
定价
更多

如何将含图片列的爬取DataFrame写入Django SQLite模型及代码存放位置?

代码存放位置

针对你需要持续爬取、同步最新数据的场景,推荐将爬取+数据导入逻辑放在Django自定义管理命令文件中,坚决不要把这段逻辑硬写进models.py里(models.py只负责定义数据库表结构,写业务爬取/导入逻辑会导致Django每次加载模型时自动触发爬取,引发异常)。

  • 具体目录结构(假设你的Django app名为product):
    • 在app根目录下新建两层嵌套文件夹management/commands,每层文件夹内都加一个空的__init__.py文件,让Django能识别这是可加载的命令模块
    • 最终导入逻辑的文件路径为product/management/commands/sync_tshirt_data.py
  • 这种存放方式的优势:可以独立在命令行运行,后续搭配crontab、定时任务即可实现周期性爬取更新,和Web服务的请求逻辑完全解耦,不会互相影响。
具体数据导入实现

提前对齐字段映射关系

你的DataFrame列名和已定义的T_shirt模型字段不是完全同名,需要一一对应:

  • DataFrame Images → 模型 image 字段 注意:Django的ImageField要求传入的是MEDIA_ROOT配置目录下的相对文件路径,如果你的Image列目前存的是远程图片URL,需要先补全图片下载到本地media目录的逻辑,不能直接把远程URL赋值给ImageField
  • DataFrame Titles → 模型 title 字段
  • DataFrame Prices → 模型 price 字段
  • DataFrame link → 模型 link 字段
  • DataFrame Website → 模型 website 字段
  • DataFrame brand → 模型 brand 字段

导入代码示例

在刚才创建的sync_tshirt_data.py文件中写入如下逻辑(包含你之前的DataFrame生成代码):

from django.core.management.base import BaseCommand
from product.models import T_shirt  # 替换为你实际的T_shirt模型导入路径
import pandas as pd

class Command(BaseCommand):
    help = "同步爬取的mainlinemenswear品牌T恤数据到SQLite数据库"

    def handle(self, *args, **options):
        # 把你之前写的爬取+DataFrame生成逻辑完整移到这里
        mainline_t_shirt = pd.DataFrame({
            'Images': image,
            'Titles': title,
            'Prices': price,
            'link': link,
            'Website': 'mainlinemenswear',
            'brand': brand
        })

        # 基于商品链接做去重更新,保证始终留存最新记录,不产生重复数据
        for _, row in mainline_t_shirt.iterrows():
            T_shirt.objects.update_or_create(
                link=row["link"],  # 商品链接全局唯一,作为去重匹配的标识
                defaults={
                    "image": row["Images"],
                    "title": row["Titles"],
                    "price": row["Prices"],
                    "website": row["Website"],
                    "brand": row["brand"]
                }
            )

        self.stdout.write(self.style.SUCCESS("T恤数据同步完成"))
  • 这里用update_or_create而不是直接批量插入的原因:每次运行爬取逻辑时,相同链接的商品会自动更新为最新的价格、标题、图片信息,完全匹配你“持续留存最新记录”的需求,不会在数据库里堆积重复的旧数据。
运行方式

写完代码后,在项目根目录执行命令即可完成一次数据导入:
python manage.py sync_tshirt_data
后续要做持续更新,直接把这个命令加入系统定时任务,按你需要的频率跑即可。


内容的提问来源于stack exchange,提问作者jeffgrills

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 08:06:03