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

基于BS4类名判断赋值并导出CSV的爬取问题

解决方法:修正类名判断逻辑与数据结构

首先,你的代码核心问题有两个:

  • 类名判断错误:你在判断line['class'][0],但目标span的class列表第一个元素是glyphicon,而不是完整的glyphicon glyphicon-ok text-success(这个属性值拆分后是三个独立类:glyphicon、glyphicon-ok、text-success),所以你的条件永远不会触发。
  • 重复添加字典到列表:在循环span时你重复调用quotes.append(quote),会导致同一个quote被多次添加到列表,最终CSV数据重复且混乱。

修正后的完整代码

import requests
from bs4 import BeautifulSoup
import csv

URL = "https://database.globalreporting.org/reports/49283/"
# 建议去掉verify=False,或者添加证书验证,避免安全风险
r = requests.get(URL, verify=False)
soup = BeautifulSoup(r.content, 'html5lib')

table = soup.findAll('li', attrs={'class': 'list-group-item'})
quotes = []

for row in table:
    quote = {
        'Label': "",
        'Tickmark': "",
        'Cross': ""
    }
    # 处理Label文本,去除多余空格
    quote['Label'] = " ".join(row.getText().split())
    
    # 精准查找当前row里的目标span元素
    tick_span = row.find('span', class_='text-success')
    cross_span = row.find('span', class_='text-light')
    
    if tick_span:
        quote['Tickmark'] = "Yes"
    if cross_span:
        quote['Cross'] = "No"
    
    # 每个row只添加一次quote到列表
    quotes.append(quote)

# 导出CSV,优化格式避免乱码和空行
filename = 'CSR_Info.csv'
with open(filename, 'w', newline='', encoding='utf-8') as f:
    w = csv.DictWriter(f, ['Label','Tickmark','Cross'])
    w.writeheader()
    for quote in quotes:
        w.writerow(quote)

关键改动说明

  1. 精准定位span元素:

    • 使用row.find('span', class_='text-success')直接查找带有text-success类的span(勾图标的标识类)
    • 使用row.find('span', class_='text-light')查找叉图标对应的span
      这种方式比遍历所有span再判断更简洁高效。
  2. 初始化字典字段:
    提前给Tickmark和Cross设为空字符串,确保导出CSV时即使没有对应值也会保留列的位置,不会出现错位。

  3. 避免重复添加数据:
    每个row对应的quote只在处理完所有逻辑后添加一次到quotes列表,保证数据唯一且有序。

  4. 优化CSV写入:
    添加newline=''避免Windows系统下CSV出现空行,指定encoding='utf-8'防止潜在的字符乱码问题。

这样修改后,就能正确识别勾和叉的标识,导出的CSV会呈现你期望的格式:比如Integrated:,Yes, 或者Integrated:,,No。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:15:17