爬取baidunews.htm/静态网页里新闻标题文本,并进行词频统计,接照词频从高到低的顺序显示。 按照模块化思想: (1) getcontent(fileneame,path)获取html文本里的新闻标题返回 filename是文件名 path代表select (方法的筛选参数 《标签路径)返口新闻标题组成的字符串 (②词频统计:tongjicipin(txt) 统计新闻标题的词频 #txt 数据解析返回数据 (3)词云展示:show(txt)
时间: 2024-03-05 12:52:58 浏览: 152
好的,这是一个关于爬取网页并进行词频统计的问题。按照您的要求,我将会为您编写一个程序,具体实现步骤如下:
```python
import requests
from bs4 import BeautifulSoup
import re
import jieba
from collections import Counter
import matplotlib.pyplot as plt
from wordcloud import WordCloud
def getcontent(filename, path):
"""
获取html文本里的新闻标题
:param filename: 文件名
:param path: 标签路径
:return: 新闻标题组成的字符串
"""
with open(filename, 'r', encoding='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html, 'html.parser')
titles = soup.select(path)
content = ''
for title in titles:
content += title.get_text() + '\n'
return content
def tongjicipin(txt):
"""
统计新闻标题的词频
:param txt: 数据解析返回数据
:return: 词语和词频组成的字典
"""
words = jieba.cut(txt)
counter = Counter(words)
return dict(counter)
def show(txt):
"""
展示词云图
:param txt: 数据解析返回数据
"""
wc = WordCloud(background_color='white', font_path='msyh.ttc')
wc.generate_from_frequencies(txt)
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
if __name__ == '__main__':
filename = 'baidunews.htm'
path = '.c-title a'
content = getcontent(filename, path)
counter = tongjicipin(content)
counter = dict(sorted(counter.items(), key=lambda x: x[1], reverse=True))
show(counter)
```
在这个程序中,我们首先定义了三个函数:
- `getcontent()`:用于获取HTML文本里的新闻标题。
- `tongjicipin()`:用于统计新闻标题的词频。
- `show()`:用于展示词云图。
在程序的主函数中,首先调用`getcontent()`函数获取新闻标题组成的字符串,然后调用`tongjicipin()`函数统计词频,并按照词频从高到低排序。最后,调用`show()`函数展示词云图。
注意,为了生成中文词云图,我们需要使用中文字体文件,这里我使用的是微软雅黑字体。如果您的电脑没有安装该字体,可以将`font_path`参数修改为您电脑中的其他中文字体文件路径。
阅读全文