Python网络爬虫:爬取CSDN博文评论 并制作成词云图

本文介绍了如何使用Python爬取CSDN博文的评论,并将评论内容制作成词云图。首先,通过分析网络请求找到评论数据的源地址和关键参数;接着,安装必要的Python模块;然后,编写爬虫代码,利用jieba库进行分词处理;最后,展示生成的词云图效果。

hello,大家好,我是wangzirui32,今天来教大家如何爬取CSDN博文评论,并制作成词云图。
开始学习吧!

1. 寻找评论源地址

打开一篇博文,再打开抓包工具Network,发现源地址:
评论数据地址
我们来解析一下返回数据:

{...       # 省略亿些
	"data":{
		"list":[
			{"info":{
				"content":"博主不光能写的一手好代码,还能写的一手好文章。",
				"userName":"Rex__404",
				"digg":1,
				"diggArr":[],
				"parentUserName":null,
				...
				}
			}
...

可以看到,评论数据就在data的list中,遍历每一项的info中的content,就可以爬取评论数据了。
再解析一下URL:

https://blog.csdn.net/phoenix/web/v1/comment/list/116066478?page=1&size=10&commentId=

得出,116066478为文章id,page为页数,size为每页返回的评论数量,commentId可以去掉(因为它是空参数)。

2. 安装所需模块

输入pip安装命令:

pip install requests jieba pyecharts fake_useragent

就可以安装本示例所有的模块。

3. 编写代码

代码奉上——

from collections import Counter  # Python内置模块
from jieba.posseg import lcut
from pyecharts.charts import WordCloud
from fake_useragent import UserAgent as UA
import requests

# 输入id
article_id = input("请输入文章id号:")
# 拼接URL
url = 'https://blog.csdn.net/phoenix/web/v1/comment/list/' + article_id
# 参数设置 先爬取100条评论
params = {
    "page": "1",
    "size": "100",
}
# UA伪装
headers = {
    "User-Agent": UA().random
}
# 获取评论数据
r = requests.get(url, headers=headers, params=params)
data = r.json()['data']['list']

# 处理评论数据
comment_words = []

for i in data:
    # 分词 并返回词性
    comment_content = lcut(i['info']['content'])
    # 加入总列表
    comment_words += comment_content

# 过滤词语
new_comment_words = []
# 排除的词性列表 分别是 数字,未知(包含标点符号),英文
remove_part = ['m', 'x', 'eng']
for i in comment_words:
    word = list(i)
    # 一个字的词也要去掉
    if (len(word[0]) == 1) or (word[1] in remove_part):
        continue # 跳过本次循环
    new_comment_words.append(word[0])

# 统计每个词出现的频率 要使用Counter函数
counter = list(Counter(new_comment_words).items())

# 绘制词云图 shape='cardioid'设置词云形状为心形
c = (
    WordCloud()
    .add("评论词云图", counter, word_size_range=[20, 100], shape='cardioid')
)

c.render()

(关于jieba库的介绍可以参考我的这篇文章
在代码中,我们首先对评论内容进行了获取,带词性分析的分词,然后,对总分词结果进行过滤,过滤掉了标点,数字和字母,还有一个字的词语,得到了new_comment_words列表。
在第45行中,我使用了items函数,这是因为生成词云图需要的是一组元组(每组元组以 (词语, 出现频率) 作标准),而items函数刚好将Counter(new_comment_words)的返回字典键值对转化为了一组元组。

4. 效果展示

运行代码,输入:

请输入文章id号:116066478

打开生成的render.html文件,可以看到:
词云1
这里是我的其中一篇博文的效果,你还可以输入其他的id号,如,笔者在CSDN排行榜上选了一些热门文章的id,生成结果如图:
词云2
词云3
词云4


好了,今天的课程就到这里,喜欢的可以点赞收藏,我是wangzirui32,我们下次再见!

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值