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

Python结合BeautifulSoup、Pandas批量爬取CSV URL输出异常问题求助

问题根因与修正代码

问题定位

  • 数据漏存:原有代码中drop(0, axis=0)主动删除了提取到的第一条内容,3条数据删除1条后仅保留2条
  • 列偏移:每次拼接DataFrame时未重置行索引,转置后原有行索引会转为列名,不同URL的内容就会错位到不同列
  • CSV读取URL:直接使用pandas的read_csv方法读取单列URL即可替换硬编码列表

修正后完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 读取CSV中的URL列表,假设CSV文件名为urls.csv,单列列名为url,根据实际情况修改参数
url_df = pd.read_csv('urls.csv')
urls = url_df['url'].tolist()

# 存储最终结果的列表
drivers_result = []
challenges_result = []

for url in urls:
    # 增加超时处理避免请求卡住,可根据网络情况调整参数
    page = requests.get(url, timeout=10)
    soup = BeautifulSoup(page.text, 'html.parser')
    toc = soup.find("div", id="toc")
    
    # 提取驱动因素
    drivers = []
    for x in toc.select('li:-soup-contains-own("Market drivers") li'):
        drivers.append(x.get_text(strip=True))
    # 按[URL, 驱动1, 驱动2, 驱动3]格式存入结果列表
    drivers_result.append([url] + drivers[:3])
    
    # 提取市场挑战
    challenges = []
    for y in toc.select('li:-soup-contains-own("Market challenges") li'):
        challenges.append(y.get_text(strip=True).replace('Table Impact of drivers and challenges', ''))
    # 按[URL, 挑战1, 挑战2, 挑战3]格式存入结果列表
    challenges_result.append([url] + challenges[:3])

# 统一转DataFrame导出,列名可按需自行修改
pd.DataFrame(drivers_result, columns=['源URL', '驱动因素1', '驱动因素2', '驱动因素3']).to_csv('detail-dr.csv', index=False, encoding='utf-8-sig')
pd.DataFrame(challenges_result, columns=['源URL', '挑战1', '挑战2', '挑战3']).to_csv('detail-ch.csv', index=False, encoding='utf-8-sig')

代码说明

  • 去掉了冗余的函数定义和循环内反复写文件的操作,最终统一导出性能更好,也不会出现拼接索引错误
  • 增加了utf-8-sig编码导出,避免CSV打开时乱码
  • 切片[:3]避免个别页面提取到超过3条内容时导出格式错乱
  • 输出CSV第一列为源URL,后续三列依次对应提取的三条内容,完全符合期望格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:15:01