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

排查Python HTML转CSV爬虫无输出问题

排查CSV写入空文件的核心问题

结合你提供的代码和描述,单独测试模块正常但集成后无输出,大概率是流程中某一步静默跳过了数据写入逻辑,下面是针对性的排查方向和修改建议:


1. 先加调试打印,定位卡壳环节

在关键步骤添加打印,直接看哪一步没执行或返回空:

import csv
from urllib.parse import urljoin
import os

def main(base_url, query_string):
    processed_urls = set()
    main_url = base_url + query_string
    main_page_content = fetch_page_content(main_url)

    csv_file = "my_actual_path"
    # 确认CSV文件实际路径,避免找错文件
    print(f"CSV实际路径: {os.path.abspath(csv_file)}")

    with open(csv_file, mode='w', newline='', encoding='utf-8-sig') as file:
        writer = csv.writer(file, delimiter=',')
        writer.writerow(['registered', 'envelopes', 'valid'])
        print("已写入CSV表头")

        if main_page_content:
            print(f"主页面内容长度: {len(main_page_content)}")
            all_links = parse_links(main_page_content)
            print(f"主页面提取到{len(all_links)}个链接")
            
            for idx, a_tag in enumerate(all_links):
                href = a_tag.get('href')
                print(f"处理第{idx+1}个链接: {href}")
                if href and not href.startswith('http'):
                    # 用urljoin替代手动拼接,避免相对路径错误(比如../开头的链接)
                    full_url = urljoin(base_url, href)
                    print(f"解析后完整URL: {full_url}")
                    
                    if full_url not in processed_urls:
                        processed_urls.add(full_url)
                        result = extract_table_data(full_url, processed_urls, base_url)
                        print(f"从{full_url}提取到{len(result)}条数据")

                        for record in result:
                            try:
                                writer.writerow([record['volici_v_seznamu'], record['vydane_obalky'], record['platne_hlasy']])
                                print(f"已写入数据: {record}")
                            except KeyError as e:
                                print(f"数据缺失键{e}: {record}")
                else:
                    print(f"跳过链接: 空链接或绝对URL")
        else:
            print("主页面内容获取失败")
    
    print(f"数据写入完成,路径: {csv_file}")

2. 重点排查几个高频问题

(1)链接解析错误

你手动拼接相对URL的逻辑f"{base_url.rstrip('/')}/{href.lstrip('/')}"无法处理../开头的上级目录路径,会生成无效URL,导致extract_table_data拿不到数据。改用urljoin可以彻底解决这个问题。

(2)extract_table_data参数干扰

你单独测试解析函数时,是否传了processed_urls和base_url这两个额外参数?如果函数内部逻辑依赖这两个参数做递归或过滤,可能导致返回空列表。

(3)parse_links返回空列表

虽然单独测试解析正常,但主页面的结构可能和你测试时的页面不一致,导致parse_links没提取到任何<a>标签。通过打印len(all_links)可以直接确认。

(4)CSV路径错误

你写的my_actual_path可能是相对路径,实际写入的文件不在你预期的目录下。打印绝对路径可以验证这一点。


3. 额外注意点

  • 如果extract_table_data返回的是单个字典而非列表,for record in result会遍历字典的键,直接触发KeyError,导致数据无法写入。
  • 确认fetch_page_content在主脚本中是否携带了正确的请求头(比如User-Agent),有些网站会拦截无标识的请求,返回空内容但不抛异常。

内容的提问来源于stack exchange,提问作者Radim Šoukal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:50:40