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

新手求助:如何格式化Python爬虫提取的网页文本输出

网页爬虫文本格式化解决方案

你的问题出在直接提取标签的.text属性时,会保留网页源码里的所有换行、空白和转义字符,导致输出格式混乱。下面是两种实用的解决方法:

方法1:结构化提取段落(推荐)

网页正文通常用<p>标签包裹每个段落,直接遍历这些标签提取文本,能保留天然的段落分隔:

from bs4 import BeautifulSoup
import requests

def scraper(url):
    req = requests.get(url)
    soup = BeautifulSoup(req.content, "html.parser")
    
    # 提取并清理标题、副标题
    title = soup.find("title").text.strip()
    subtitle = soup.find("h2").text.strip()
    
    # 提取所有正文段落,过滤空内容
    article = soup.find("article", class_="grid_8 prefix_2 textoArea")
    paragraphs = article.find_all("p")
    clean_text = "\n\n".join([p.text.strip() for p in paragraphs if p.text.strip()])
    
    # 返回格式化后的字符串
    return f"标题: {title}\n\n副标题: {subtitle}\n\n正文:\n{clean_text}"

# 调用函数并打印结果
result = scraper("https://www.folhape.com.br/economia/preco-da-gasolina-cai-apos-duas-semanas-de-alta-nos-postos-diz-anp/280763/")
print(result)

方法2:清理现有文本的多余空白

如果不想遍历标签,也可以用正则表达式替换掉多余的换行和空白:

from bs4 import BeautifulSoup
import requests
import re

def scraper(url):
    req = requests.get(url)
    soup = BeautifulSoup(req.content, "html.parser")
    
    title = soup.find("title").text.strip()
    subtitle = soup.find("h2").text.strip()
    
    # 提取原始文本并清理
    raw_text = soup.find("article", class_="grid_8 prefix_2 textoArea").text
    # 替换连续的换行和空白为单个换行
    clean_text = re.sub(r'\s*\n\s*', '\n', raw_text.strip())
    # 把多个连续换行换成两个(模拟段落间距)
    clean_text = re.sub(r'\n{2,}', '\n\n', clean_text)
    
    return f"标题: {title}\n\n副标题: {subtitle}\n\n正文:\n{clean_text}"

result = scraper("https://www.folhape.com.br/economia/preco-da-gasolina-cai-apos-duas-semanas-de-alta-nos-postos-diz-anp/280763/")
print(result)

关键操作说明

  • .strip():去掉文本前后的多余空白和换行
  • "\n\n".join(...):用两个换行分隔不同段落,还原正常阅读的段落间距
  • 正则替换:批量清理网页源码中冗余的空白和换行,让文本结构更整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:13:11