Python网页爬取时如何将提取的文本分割为段落?
解决网页爬取文本保留段落的问题
这个问题很常见——get_text()方法默认会把所有嵌套标签的文本合并成一串,自然就丢失了段落结构。咱们来修改代码,让提取的文本保留原有的段落划分:
修改后的完整代码
import requests as req from bs4 import BeautifulSoup import pandas as pd num = 0 atc = {} for i in range(len(url)): res = req.get(url[i]).content soup = BeautifulSoup(res, "html.parser") # 先定位到内容容器 content_container = soup.find(class_='meteredContent css-1r7ky0e') if not content_container: atc[i] = "" continue # 提取容器内所有的段落标签(这里假设是<p>,根据实际网页结构调整) paragraphs = content_container.find_all('p') # 用两个换行符分隔段落,还原段落结构;同时过滤掉空的段落 article_text = '\n\n'.join([p.get_text(strip=True) for p in paragraphs if p.get_text(strip=True)]) atc[i] = article_text # 保存到CSV st = pd.DataFrame(atc, index=['text',]) st.T.to_csv("articles.csv", encoding='utf_8_sig')
关键修改点说明
- 不再直接对内容容器调用
get_text(),而是先找到容器内的段落标签(这里用<p>,大多数新闻/文章网站会用这个标签定义段落) - 使用
'\n\n'.join(...)把每个段落的文本用两个换行符连接,这样保存到CSV后,打开时段落之间会有空行分隔,还原原文的段落结构 - 增加了
if not content_container的判断,避免找不到容器时出现报错;同时过滤掉空的段落,避免多余的空行
适配不同网页结构
如果目标网站的段落不是用<p>标签,而是用其他标签(比如<div class="paragraph">),只需要修改find_all()的参数即可:
# 示例:如果段落是带class的div标签 paragraphs = content_container.find_all('div', class_='paragraph')
你可以先打开目标网页的开发者工具(F12),查看文章内容里的段落对应的HTML标签,再调整代码中的标签选择器。
内容的提问来源于stack exchange,提问作者yngstgy
相关产品推荐
相关产品推荐

