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

如何用BeautifulSoup抓取网页标题及对应段落并导出为CSV?

用BeautifulSoup实现标题与对应段落的抓取及CSV输出

完全可以实现你的需求,以下是修改后的代码及关键逻辑说明:

完整代码

from bs4 import BeautifulSoup
import requests

# 获取网页内容
website = requests.get('https://venngage.com/blog/landing-page-examples/')
soup = BeautifulSoup(website.content, 'html.parser')

# 目标抓取的标题标签
target_headings = ['h2', 'h3', 'h4']
# 用于识别后续兄弟节点是否为新标题的标签集合
all_headings = ['h1', 'h2', 'h3', 'h4']

# 打开文件准备写入CSV(也可直接打印输出)
with open('heading_content.csv', 'w', encoding='utf-8') as output_file:
    # 遍历所有目标标题
    for heading in soup.find_all(target_headings):
        heading_type = heading.name.upper()
        # 提取标题文本并去除前后空白
        heading_text = heading.get_text(strip=True)
        
        # 收集当前标题下的所有段落文本
        paragraph_list = []
        # 遍历标题的后续兄弟节点
        for sibling in heading.next_siblings:
            # 遇到新的标题则停止收集
            if sibling.name in all_headings:
                break
            # 仅处理p标签,跳过空段落
            if sibling.name == 'p':
                p_content = sibling.get_text(strip=True)
                if p_content:
                    paragraph_list.append(p_content)
        
        # 将多段落文本用换行符连接
        combined_paragraphs = '\n'.join(paragraph_list)
        
        # 生成符合要求的行(用双引号包裹字段,避免特殊字符破坏CSV格式)
        output_line = f'"{heading_type}";"{heading_text}";"{combined_paragraphs}"'
        # 写入文件并打印
        output_file.write(output_line + '\n')
        print(output_line)

关键逻辑说明

  1. 遍历标题后续内容:通过heading.next_siblings获取标题之后的所有兄弟节点,确保只抓取当前标题下方的内容,不会混入其他标题的段落。
  2. 终止条件判断:当遍历到新的标题标签(h1-h4)时,停止收集段落,避免跨标题混采内容。
  3. 段落处理:仅提取p标签的文本,跳过空段落,并用换行符连接多个段落,符合你的格式要求。
  4. CSV格式兼容:用双引号包裹每个字段,避免文本中出现的分号、逗号等特殊字符导致CSV文件格式错乱,保证文件可直接用Excel等工具打开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:20:52