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

现有可运行爬虫如何从All_Round表取轮次ID插入Scraping_Score表

解决方案

前置操作

首先需要先给Scraping_Score表新增关联轮次ID的字段,执行以下SQL:

ALTER TABLE Scraping_Score ADD COLUMN ID_Round INTEGER;

代码修正

你的实现思路整体是正确的,只需要修正两处cursor.execute的写法以及结果取值逻辑即可:

1. 轮次ID查询部分修正

原代码中你用cursor.lastrowid是错误的,这个方法仅用于获取INSERT操作生成的自增主键ID,查询操作需要用fetchone()拿结果。

if 'event__round' in classes:
    current_round = PremierLeague.text.split(" ")[-1]  # 仅保留轮次数字
    # 替换原有注释的查询代码
    # 查询对应轮次的ID_Round,参数用?做占位符,传入转换为整数的轮次编号
    cursor.execute("SELECT ID_Round FROM All_Round WHERE Number_Round = ?", (int(current_round),))
    # 取出查询结果的第一个值就是目标ID
    query_res = cursor.fetchone()
    if not query_res:
        # 异常处理:如果查不到对应轮次,可根据自己的需求调整逻辑,比如跳过、抛错
        raise ValueError(f"未找到轮次{current_round}对应的ID")
    current_round_ID = query_res[0]

2. 赛事数据插入部分修正

插入语句需要补全所有要写入的字段和对应的值,不能只写ID_Round:

# 替换原有注释的插入代码
cursor.execute('''
INSERT INTO Scraping_Score (current_round, date, time, team_home, team_away, score_home, score_away, ID_Round)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
''', (
    int(current_round),
    date,
    time,
    team_home.text,
    team_away.text,
    int(score_home.text),
    int(score_away.text),
    current_round_ID
))
# 注意如果你的数据库连接没有开启自动提交,需要执行提交操作,可根据情况选择单条提交或者所有数据爬取完统一提交
# conn.commit()

注意事项

  • 传递参数的元组如果只有一个元素,必须加末尾的逗号,比如(int(current_round),),否则Python会识别为单个变量而非元组,触发参数数量不匹配的报错
  • 如果你的All_Round表存储了多个赛事的轮次,需要在查询的WHERE条件中补充ID_Tournment = 对应赛事ID的过滤条件,避免查错其他赛事的轮次ID
  • 所有数值类型的字段写入前最好做类型转换,避免字符串类型写入整数字段出现异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:54:07