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

如何用BeautifulSoup提取新闻文章正文,排除冗余内容?

几种简便方法帮你用BeautifulSoup提取干净的新闻正文

嘿,这个问题我太熟悉了——用BeautifulSoup抓新闻正文的时候,那些乱七八糟的脚本、侧边栏广告、导航栏内容真的烦死人!我踩过不少坑,总结了几个实用的方法,能帮你快速过滤掉冗余内容,只留下纯正文:

方法1:利用语义化HTML标签精准定位

正规新闻网站大多会用<article>标签包裹完整的新闻内容,或者用<div>配合特定类名来定义正文区域。先定位到这个核心容器,再提取里面的段落,就能避开大部分冗余:

from bs4 import BeautifulSoup
import requests

# 替换成你要抓取的新闻URL
target_url = "https://example.com/news-article"
response = requests.get(target_url)
soup = BeautifulSoup(response.text, 'html.parser')

# 第一步:定位文章核心容器,优先找<article>标签
article_box = soup.find('article')
if not article_box:
    # 如果没有article标签,试试找常见的正文类名,比如article-content、post-body
    article_box = soup.find('div', class_=['article-content', 'post-body', 'main-content'])

if article_box:
    # 第二步:提取容器内所有<p>标签的文本,过滤空内容
    clean_paragraphs = [p.get_text(strip=True) for p in article_box.find_all('p') if p.get_text(strip=True)]
    # 拼接成完整的正文
    full_article_text = '\n\n'.join(clean_paragraphs)
    print(full_article_text)
else:
    print("没找到合适的正文容器,可能需要调整选择器哦!")

方法2:直接移除所有脚本、样式等冗余标签

你提到的那种JS代码都在<script>标签里,还有<style>、<noscript>这些标签里的内容也完全没用,直接把它们从DOM树里删掉,再提取文本就清爽多了:

# 先移除所有不需要的标签
for unwanted_tag in soup(["script", "style", "noscript", "nav", "aside", "footer"]):
    unwanted_tag.decompose()

# 提取所有正文相关标签的文本(比如p、h1-h3,根据需求调整)
text_elements = soup.find_all(['p', 'h1', 'h2', 'h3'])
clean_text = '\n\n'.join([elem.get_text(strip=True) for elem in text_elements if elem.get_text(strip=True)])
print(clean_text)

这里我还加了nav、aside、footer这些标签,它们一般是导航、侧边栏、页脚,直接删掉能进一步减少冗余。

小技巧:处理顽固的冗余文本

如果还是有零星的无关内容(比如某个带广告的p标签),可以通过判断文本长度或者关键词来过滤:

# 只保留长度超过20个字符的段落,过滤掉短的广告/提示文本
clean_paragraphs = [p.get_text(strip=True) for p in article_box.find_all('p') if len(p.get_text(strip=True)) > 20]

另外,如果遇到动态加载的内容(比如滚动才加载的段落),BeautifulSoup就搞不定了,这时候可能需要配合Selenium或者Playwright来渲染页面,但如果是静态页面,上面的方法足够用啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:32:49