You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Flask-SQLAlchemy模型插入爬虫采集的数据?

解决方案

方式1:边爬边插入数据库

无需先将数据存入列表,爬取到单条数据后直接创建Job实例并写入数据库:

from your_app_module import db, Job  # 替换为你的Flask应用模块路径

# 遍历Selenium获取的元素集合
for row in tables:
    # 爬取对应字段数据(注意替换为实际匹配各字段的CSS选择器)
    title = row.find_element(By.CSS_SELECTOR, '.title-class').text
    info = row.find_element(By.CSS_SELECTOR, '.info-class').text
    location = row.find_element(By.CSS_SELECTOR, '.location-class').text
    link = row.find_element(By.CSS_SELECTOR, '.link-class').get_attribute('href')
    
    # 创建Job模型实例
    new_job = Job(title=title, info=info, location=location, link=link)
    # 将实例添加到数据库会话
    db.session.add(new_job)

# 提交所有变更至数据库
db.session.commit()

方式2:先存列表再批量插入

如果仍保留先存列表的习惯,可将列表中的字典数据转成Job实例后批量插入:

from your_app_module import db, Job

jobs = []
for row in tables:
    jobs.append({
        'title': row.find_element(By.CSS_SELECTOR, '.title-class').text,
        'info': row.find_element(By.CSS_SELECTOR, '.info-class').text,
        'location': row.find_element(By.CSS_SELECTOR, '.location-class').text,
        'link': row.find_element(By.CSS_SELECTOR, '.link-class').get_attribute('href'),
     })

# 遍历列表,将字典转成Job实例并添加到会话
for job_data in jobs:
    new_job = Job(**job_data)  # 字典解包直接赋值给模型字段
    db.session.add(new_job)

# 提交事务
db.session.commit()

关键注意事项

  • 若爬虫是独立脚本,需先初始化Flask应用上下文才能操作数据库:
    from your_app import create_app, db, Job
    
    app = create_app()
    with app.app_context():
        # 在此处编写爬取和插入逻辑
    
  • 只有执行db.session.commit(),会话中的变更才会真正写入数据库;若插入过程出错,可通过db.session.rollback()回滚操作。
  • 可选去重:为避免重复插入相同数据,可给Job模型的link字段添加unique=True约束,或插入前先查询校验:
    existing_job = Job.query.filter_by(link=link).first()
    if not existing_job:
        db.session.add(new_job)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:53:28