爬虫---提取关键字生成词云图

提出问题

如何爬取新闻的关键字,并生成词云图或者饼图展示?
比如一则新闻:https://new.qq.com/rain/a/20230315A08LAK00。如下图所示:

解决思路
1、先爬取新闻中的所有文字
2、再把所有的文字分割,使之成为一个个的字
3、将出现的字进行统计,统计出次数靠前的10位
4、再生成词云图或饼图

请看以下代码:

 1 import jieba as jieba
 2 import requests
 3 from bs4 import BeautifulSoup
 4 from pyecharts.charts import WordCloud, Pie
 5 
 6 if __name__ == "__main__":
 7     headers = {
 8         "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
 9     }
10     url="https://new.qq.com/rain/a/20230315A08LAK00"
11     res_html = requests.get(url, headers=headers).text
12     # print(res_html)
13 
14     # 创建一个BeautifulSoup对象。对获取的网页进行过滤,获取其内容
15     soup = BeautifulSoup(res_html, "lxml")
16     # 获取文章的文字
17     txt = soup.select(".content-article")[0].text
18     # print(txt)
19     # 对文章进行分割
20     words = jieba.lcut(txt)
21 
22     # 统计每个词语出现的次数
23     counts = {}
24     for word in words:
25         if len(word) == 1:
26             continue
27         else:
28             counts[word] = counts.get(word, 0) + 1
29     # 获取出现次数最多的前10个词语
30     # counts.items -----> counts里面的所有项
31     # a ------> counts里面的每一项
32     sort_data = sorted(counts.items(), key=lambda a: a[1], reverse=True)[:10]
33 
34     # 词云图
35     wc = WordCloud()
36     wc.add("", sort_data, word_size_range=[20, 100])
37     wc.render("1.html")
38 
39     # 饼图
40     pip = Pie()
41     pip.add(
42         series_name="次数",
43         data_pair=sort_data
44     )
45     pip.render("2.html")

一起看一下运行效果:

 

 饼图:

 

posted @ 2023-03-20 19:02  excellent_1  阅读(377)  评论(0)    收藏  举报