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

Python使用pandas将爬虫全量打印数据正确写入CSV的方法

问题原因及修正方案

你的代码存在三个核心问题导致导出CSV异常:

  • 循环逻辑错位:字段提取逻辑在for report in reports循环内部,但你原来的打印/存储逻辑放在了循环外部,每次循环都会覆盖title/price等变量,最终仅能保留当前页最后一条数据
  • 存储结构错误:直接将4个字段拼成一维列表生成DataFrame,pandas会默认将每个元素识别为单独一行,因此出现字段拆分多行的问题
  • 多页逻辑缺失:现有代码仅处理了初始传入的第一页链接,没有循环/递归调用下一页地址,无法爬取多页数据

修正后完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 初始化总列表存储所有爬取结果
all_results = []
# 基础域名用于拼接相对链接
base_url = 'https://www.marketresearch.com'

def scrape_it(url):
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'html.parser')
    # 提取当前页所有报告条目
    reports = soup.find_all('tr', class_='SearchTableRowAlt')
    for report in reports:
        title = report.find('a', class_='linkTitle').text.strip()
        price = report.find('div', class_='resultPrice').text.strip()
        date_author = report.find('div', class_='textGrey').text.strip()
        detail_link = base_url + report.a['href'].strip()
        # 每个条目作为子列表加入总列表,保证结构是二维的
        all_results.append([title, price, date_author, detail_link])
    
    # 处理下一页逻辑
    next_btns = soup.find_all(class_="standardLinkDkBlue")
    if next_btns and "Next" in next_btns[-1].string:
        next_url = base_url + next_btns[-1]['href']
        # 递归爬取下一页
        scrape_it(next_url)

# 启动爬取
start_url = 'https://www.marketresearch.com/search/results.asp?qtype=2&datepub=3&publisher=Technavio&categoryid=0&sortby=r'
scrape_it(start_url)

# 所有页面爬取完成后统一生成DataFrame导出,指定列名
df = pd.DataFrame(all_results, columns=['报告标题', '价格', '发布日期/作者', '详情链接'])
df.to_csv('results-tech.csv', index=False, encoding='utf_8_sig')

代码说明

  • 提前初始化二维总列表all_results,每条爬取数据作为子列表存入,保证pandas生成DataFrame时每行对应一条数据、每列对应一个字段
  • 将存储逻辑从循环内移出,所有页爬取完成后统一导出,避免重复IO
  • 拼接基础域名补全相对链接,保证详情链接可直接访问
  • 导出时添加index=False参数去掉默认的索引列,encoding='utf_8_sig'保证中文在Excel中打开不乱码
  • 添加下一页判断逻辑,只有存在“Next”按钮时才继续爬取,避免爬取到错误链接

内容的提问来源于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.25 02:54:04