用python写一个网络舆情分析程序
时间: 2023-10-13 17:04:44 浏览: 209
python网络舆情分析系统
5星 · 资源好评率100%
以下是一个简单的网络舆情分析程序,它可以从指定的网站上获取新闻数据,通过情感分析和关键词提取等技术,对这些新闻进行分析和可视化。
```python
import requests
from bs4 import BeautifulSoup
import jieba.analyse
import jieba.posseg as pseg
from snownlp import SnowNLP
import matplotlib.pyplot as plt
# 设置请求头,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 获取网页内容
def get_html(url):
resp = requests.get(url, headers=headers)
resp.encoding = resp.apparent_encoding
html = resp.text
return html
# 获取新闻列表
def get_news_list(url):
html = get_html(url)
soup = BeautifulSoup(html, 'html.parser')
news_list = soup.find_all('a', class_="news_title")
return news_list
# 对文本进行情感分析
def sentiment_analysis(text):
s = SnowNLP(text)
return s.sentiments
# 对文本进行关键词提取
def keyword_extraction(text):
keywords = jieba.analyse.extract_tags(text, topK=10, withWeight=True, allowPOS=('n', 'vn', 'v'))
return keywords
# 对新闻进行分析
def analyze_news(url):
news_list = get_news_list(url)
senti_scores = [] # 情感分数列表
keyword_dict = {} # 关键词词频字典
for news in news_list:
title = news.get_text().strip()
link = news['href']
content = get_html(link)
soup = BeautifulSoup(content, 'html.parser')
text = soup.find('div', class_='article').get_text().strip()
# 计算情感分数
senti_score = sentiment_analysis(text)
senti_scores.append(senti_score)
# 提取关键词
keywords = keyword_extraction(text)
for keyword in keywords:
if keyword[0] in keyword_dict:
keyword_dict[keyword[0]] += keyword[1]
else:
keyword_dict[keyword[0]] = keyword[1]
# 绘制情感分数直方图
plt.hist(senti_scores, bins=10, color='skyblue')
plt.xlabel('Sentiment Score')
plt.ylabel('Number of News')
plt.title('Sentiment Analysis')
plt.show()
# 输出关键词词频排名
keyword_list = sorted(keyword_dict.items(), key=lambda x: x[1], reverse=True)
print('Top 10 keywords:')
for i in range(10):
print('{}. {} - {:.2f}'.format(i+1, keyword_list[i][0], keyword_list[i][1]))
if __name__ == '__main__':
url = 'https://news.sina.com.cn/'
analyze_news(url)
```
在这个程序中,我们使用了requests和BeautifulSoup库来获取和解析网页内容,使用jieba和SnowNLP库进行文本处理,使用matplotlib库绘制图表。程序的大致思路是:
1. 获取新闻列表:从指定的网站上获取新闻列表。
2. 对新闻进行分析:对每条新闻进行情感分析和关键词提取。
3. 绘制情感分数直方图:将所有新闻的情感分数绘制成直方图,以便我们了解新闻整体的情感倾向。
4. 输出关键词词频排名:输出所有新闻中出现频率最高的关键词,以便我们了解新闻的主题和热点。
需要注意的是,这只是一个简单的示例程序,实际的网络舆情分析程序可能需要更复杂、更精细的处理流程和算法来达到更好的分析效果。
阅读全文