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

CSV链接爬取遇断链终止、输出大量None的问题求助

解决方案:跳过错误链接并消除无效输出

我来帮你修复这两个问题,下面是修改后的完整代码,之后会逐一说明关键改动:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
from bs4 import BeautifulSoup 
import requests
from requests.exceptions import RequestException  # 导入请求异常类

# 读取CSV文件
with open('urls.csv','r') as f:
    csv_raw_cont = f.read()

# 按行分割,过滤掉空行
split_csv = [line.strip() for line in csv_raw_cont.split('\n') if line.strip()]

# 指定分隔符
separator = ";"

# 遍历每一行
for each in split_csv:
    # 获取URL,处理分割后可能的空值
    try:
        url = each.split(separator)[0].strip()
        if not url:
            continue
    except IndexError:
        print(f"无效行格式:{each}")
        continue

    # 处理网络请求异常
    try:
        # 添加超时时间,避免无限等待
        response = requests.get(url, timeout=10)
        response.raise_for_status()  # 抛出HTTP错误(比如404、500)
        html = response.content
    except RequestException as e:
        print(f"请求URL失败 {url}: {str(e)}")
        continue

    # 解析HTML
    soup = BeautifulSoup(html,'lxml')
    # 先找到目标div,避免None调用findAll
    products_picture_div = soup.find("div", {"class": "productsPicture"})
    if not products_picture_div:
        print(f"页面未找到目标div {url}")
        continue

    tags = products_picture_div.findAll("a")
    for tag in tags:
        href = tag.get('href')
        # 只打印非None的href
        if href:
            print(href)

关键改动说明:

1. 捕获网络请求异常,避免程序终止

  • 导入了requests.exceptions.RequestException,用try-except包裹请求过程,捕获所有请求相关的错误(比如断网、404、超时等)
  • 添加了timeout=10,防止请求无限挂起
  • 调用response.raise_for_status(),把HTTP状态码错误(如404、500)也转为异常捕获
  • 遇到错误时打印提示并跳过当前URL,程序继续运行

2. 避免NoneType的AttributeError

  • 先将soup.find("div", {"class": "productsPicture"})的结果保存到变量,判断是否为None
  • 如果找不到目标div,直接跳过当前页面,不会执行后续的findAll操作,避免报错

3. 消除None输出

  • 先获取href = tag.get('href'),判断href是否非空,只有当存在有效链接时才打印
  • 这样就不会输出那些没有href属性的a标签对应的None

4. 优化CSV行处理

  • 过滤了空行:[line.strip() for line in csv_raw_cont.split('\n') if line.strip()],避免处理空内容的行
  • 处理分割URL时的异常:如果行格式不正确(比如没有分隔符),捕获IndexError并跳过,避免程序崩溃

5. 增加URL有效性检查

  • 分割后对URL做strip()处理,去掉前后空格,并判断是否为空,避免请求无效的空URL

这样修改后,程序会自动跳过有问题的链接,不会终止运行,同时也不会输出无效的None内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:42:37