新手求助:如何格式化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
相关产品推荐
相关产品推荐

