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

Python CSV链接爬取:如何保持输入输出行一致性?

解决方案:保持输入输出行一一对应的Python爬虫脚本

我完全明白你的需求:要基于现有的爬虫逻辑,实现从urls.csv读取链接时严格维持输入输出行的一一对应关系——有效链接(能成功访问且找到目标元素)输出重定向后的最终链接,无效链接(请求失败或找不到目标元素)则输出error link。

下面是完整的可运行脚本,包含异常处理、重定向追踪和行序保障逻辑:

import requests
from bs4 import BeautifulSoup
import csv
import traceback

def process_single_url(url):
    """处理单个URL,返回结果或error link"""
    result = "error link"
    try:
        # 发送请求,自动跟随重定向,设置超时避免卡住
        response = requests.get(url.strip(), allow_redirects=True, timeout=10)
        # 仅处理状态码为2xx的成功响应
        if response.status_code // 100 == 2:
            soup = BeautifulSoup(response.text, 'html.parser')
            # 定位目标div
            product_div = soup.find('div', class_='productsPicture')
            if product_div:
                # 提取div下a标签的href
                target_href = product_div.find('a')['href']
                # 按需切换结果:是返回重定向后的页面URL,还是爬取到的href
                result = response.url  # 重定向后的最终页面地址
                # result = target_href  # 页面中目标a标签的链接
    except Exception as e:
        # 调试时打印异常信息,生产环境可注释
        print(f"处理URL {url} 出错: {traceback.format_exc()}")
    return result

def main():
    input_path = 'urls.csv'
    output_path = 'results.csv'
    
    # 用列表存储结果,严格保证和输入行顺序一致
    results = []
    
    # 读取输入文件
    with open(input_path, 'r', encoding='utf-8') as f:
        reader = csv.reader(f)
        for row in reader:
            if row:  # 跳过空白行
                url = row[0]
                results.append([process_single_url(url)])
            else:
                # 空白行对应输出error link,可按需改为空白行
                results.append(["error link"])
    
    # 写入结果文件
    with open(output_path, 'w', encoding='utf-8', newline='') as f:
        writer = csv.writer(f)
        writer.writerows(results)
    
    print(f"处理完成!结果已写入 {output_path}")

if __name__ == "__main__":
    main()

核心细节说明:

  • 行序绝对保障:先将所有URL的处理结果按输入顺序存入列表,最后一次性写入文件,彻底避免异常或异步操作打乱行对应关系。
  • 重定向自动处理:allow_redirects=True会自动跟随所有重定向,response.url就是最终跳转后的页面地址;如果你的需求是提取页面内的目标href,只需切换注释的result赋值行即可。
  • 全场景异常捕获:覆盖了请求超时、DNS错误、404页面、目标元素不存在等所有可能的异常情况,确保某一行出错不会影响后续行的处理。
  • 空白行兼容:自动处理urls.csv中的空白行,对应输出error link,可根据需求修改为空白行。
  • 编码防乱码:全程使用utf-8编码读写文件,避免中文链接或内容出现乱码。

使用步骤:

  1. 先安装依赖库(如果还没装):
    pip install requests beautifulsoup4
    
  2. 将你的urls.csv放在脚本同一目录下,确保每行一个链接(可包含无效链接样本)。
  3. 运行脚本,结果会自动写入results.csv,每行严格对应输入的一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:58:27