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

如何用BeautifulSoup将单篇文章的文本合并为单个字符串?

解决文章段落分组问题的方案

嘿,刚学BeautifulSoup就能上手爬数据已经很棒啦!你遇到的问题其实很常见——当前代码把所有文章的<p>标签内容都平放到一个列表里,自然没法区分哪段属于哪篇文章。咱们只需要调整一下逻辑,按文章维度先收集段落,再合并存入列表就好。

修正后的代码示例

import requests
from bs4 import BeautifulSoup

clean_article_texts = []  # 这个列表每个元素对应一篇完整文章的文本
test_links = ["url1", "url2", "url3"]  # 替换成你的测试链接

for url in test_links:
    try:
        r = requests.get(url)
        r.raise_for_status()  # 捕获请求失败的情况
        soup = BeautifulSoup(r.content, 'lxml')
        
        # 收集当前文章的所有<p>标签文本
        article_paragraphs = []
        for node in soup.find_all('p'):
            text = node.get_text(strip=True)  # strip=True去掉多余的换行和空格
            if text:  # 跳过空段落
                article_paragraphs.append(text)
        
        # 把当前文章的所有段落合并成一个字符串,用换行分隔
        full_article = '\n\n'.join(article_paragraphs)
        clean_article_texts.append(full_article)
        
    except Exception as e:
        print(f"处理链接 {url} 时出错: {e}")
        clean_article_texts.append(None)  # 或者用占位符标记失败的文章

关键逻辑说明

  1. 按文章分组:每遍历一个URL,就单独创建一个article_paragraphs列表,专门存这篇文章的所有段落文本,避免和其他文章混淆。
  2. 合并段落:用'\n\n'.join()把单篇文章的所有段落拼接成一个完整字符串,这样列表clean_article_texts的每个元素就是一篇完整文章的内容。
  3. 细节优化:
    • 用strip=True去掉段落文本前后的多余空格和换行,让内容更整洁;
    • 加了if text:判断,跳过空的<p>标签(有些页面可能存在空段落);
    • 增加了异常处理,避免某个URL请求失败导致整个程序崩溃。

额外小建议

如果目标网站的正文段落有特定的class(比如<p class="article-content">),可以更精准地定位正文,避免把导航栏、页脚的无关<p>标签也爬进来:

soup.find_all('p', class_='article-content')  # 替换成实际的class名

慢慢来,你已经迈出了很好的一步啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:48:27