编程新手求助:如何从HTML中提取纯新闻内容用于情感分析
从HTML中提取
标签内的纯新闻文本指南
嘿,作为编程新手能想到用requests和BeautifulSoup来处理网页内容,已经迈出了很棒的第一步!针对你想要提取新闻文章里<p>标签的纯文本、去除冗余HTML的需求,我来给你一步步拆解解决方案:
一、修正你的定位逻辑(关键!)
你之前的代码里尝试查找script标签的arti-flow类,这是个小失误——实际上新闻正文是在class为arti-flow的<div>容器里,里面的所有<p>标签才是你要的新闻内容。先定位到这个父容器,能帮你过滤掉页面其他无关的<p>标签(比如导航栏、侧边栏的文字)。
二、修改后的完整代码示例
import requests from bs4 import BeautifulSoup # 目标新闻链接 target_url = 'https://www.moneycontrol.com/news/business/earnings/cadila-health-consolidated-december-2018-net-sales-at-rs-3577-90-crore-up-9-77-y-o-y-3497711.html' # 发送请求获取网页内容(记得加请求头避免被反爬拦截) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } response = requests.get(target_url, headers=headers) response.raise_for_status() # 如果请求失败,抛出异常提示 # 解析HTML soup = BeautifulSoup(response.text, 'html.parser') # 定位新闻正文的父容器 article_container = soup.find('div', class_='arti-flow') if article_container: # 提取容器内所有<p>标签的文本,拼接成完整新闻 news_content = '\n\n'.join([p.get_text(strip=True) for p in article_container.find_all('p')]) print("提取到的纯新闻文本:\n") print(news_content) else: print("未找到新闻正文容器,可能页面结构有变化哦!")
三、关键代码解释
headers请求头:模拟浏览器发送请求,避免被网站的反爬机制拦截,这是新手很容易忽略的点;find('div', class_='arti-flow'):精准定位到新闻正文所在的容器,确保只提取目标区域的内容;p.get_text(strip=True):提取每个<p>标签内的纯文本,strip=True会自动去除文本前后的空格、换行等冗余字符;'\n\n'.join(...):把每个段落的文本用空行分隔,让最终的新闻内容排版更清晰。
四、后续遍历多链接&情感分析的思路
- 批量处理链接:把所有需要处理的新闻链接存到一个列表里,用
for循环遍历每个链接,重复上面的提取逻辑,把每个链接的新闻文本存到列表或本地文件中(比如用open()函数写入.txt文件); - 情感分析准备:提取完所有纯文本后,就可以用
nltk、textblob或者国内的情感分析库(比如snownlp)来处理文本啦,直接把提取到的纯文本传入这些库的分析方法即可。
小提示
如果遇到某些网站页面结构变化,导致找不到arti-flow容器,可以右键网页→检查元素,手动查看新闻正文所在的标签和类名,调整代码里的选择器就行啦!
内容的提问来源于stack exchange,提问作者Abhishek Pal
相关产品推荐
相关产品推荐

