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

Python爬虫求助:在抓取的赛事表格首列添加赛事标题

解决赛事标题添加到表格首列的问题

我帮你梳理下代码里的核心问题,然后给出修正后的完整版本,顺便帮你提前处理空行的需求:

原代码的主要问题

  1. 标题获取逻辑错误:soup.find('title')返回的是单个<title>标签对象,不需要用for循环遍历,直接调用.get_text()就能拿到赛事标题文本。
  2. writer作用域失效:你把writer定义在第一个with open块内,当这个块结束后文件会自动关闭,后续循环里的writer会报错无法写入数据。
  3. 标题插入方式不符合需求:你现在是单独把标题写一行,而实际需要把标题加到每一行数据的首列,需要在构造每行数据时做前置处理。

修正后的完整代码

# list of needed packages
import requests
from bs4 import BeautifulSoup
import time
import csv

# create string of urls to scrape
urls = ['https://cqranking.com/men/asp/gen/race.asp?raceid=36151', 'https://cqranking.com/men/asp/gen/race.asp?raceid=36151']

# 将整个爬虫逻辑放到with块内,保证writer全程有效
with open('cycling_results.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile, delimiter=';')
    # 修正表头:添加"赛事标题"列,对应首列的内容
    writer.writerow(['赛事标题', 'Start', 'Rank', '', '', 'Name', '', 'Team', '', 'Time', '', 'Points'])

    # loop through all urls in the array
    for url in urls:
        time.sleep(2)
        response = requests.get(url)
        data = response.content
        soup = BeautifulSoup(data, 'html.parser')
        
        # 获取并清理赛事标题(去除多余空格和换行)
        race_title = soup.find('title').get_text().strip()
        
        tables = soup.find_all('table')
        for table in tables:
            rows = table.find_all('tr')
            for row in rows:
                csv_row = []
                columns = row.find_all('td')
                for column in columns:
                    # 清理单元格文本的多余空白
                    csv_row.append(column.get_text().strip())
                # 仅当行有内容时才写入,直接解决空行问题
                if csv_row:
                    # 把赛事标题插入到每行的最前面
                    csv_row.insert(0, race_title)
                    writer.writerow(csv_row)

关键修改点说明

  • 调整writer作用域:把URL循环和数据处理逻辑全部放到with open代码块内,确保文件在整个爬虫过程中保持打开状态,writer可以正常写入。
  • 正确获取赛事标题:用.get_text().strip()获取并清理标题文本,避免多余的空格或换行符干扰CSV格式。
  • 标题插入每行数据:在构造好每行的csv_row后,用insert(0, race_title)把标题放到首列,再写入CSV,完全符合你的需求。
  • 提前处理空行:通过if csv_row:判断,只有当行内容非空时才写入,直接解决了你后续要处理空行的需求。

额外优化提示

  • 你当前的urls列表里两个URL是重复的,记得换成不同的赛事链接哦。
  • 可以添加try-except异常处理,应对网络请求失败、页面结构变化等情况,让爬虫更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:03:48