【Python爬虫】CSDN热榜文章热门词汇分析

处理和分析数据
jieba
中文分词工具
制作词云图
绘制图表
csv
【【Python爬虫】CSDN热榜文章热门词汇分析】csv表格处理
json
json格式
可以使用以下命令需要安装的库:
pip install BeautifulSouppip install jiebapip install wordcloudpip install matplotlib
请确保已经正确安装了 3,并且在编写代码之前设置了 3的环境变量 。
热榜信息获取 热榜上的信息获取
首先,我们需要从全站综合热榜上获取热门文章的信息 。
全站综合热榜
需要的文章信息有
["标题", "标签","作者","评论数" ,"收藏量","浏览量", "热度值", "文章链接"]
经分析,全站综合热榜文章信息数据可以在hot-rank 的api中获取到除文章标签外的信息:

【Python爬虫】CSDN热榜文章热门词汇分析

文章插图
代码如下:
def get_hot_list(page):# 每页25条信息,总共4页,100条params = {"page": page,# 页数"pageSize": "25","type": ""}hot_rank_url = 'https://blog.csdn.net/phoenix/web/blog/hot-rank'data = http://www.kingceram.com/post/requests.get(url=hot_rank_url,headers=user_headers,params=params)hot_rank_list = data.json()["data"]for article in hot_rank_list:Url = article["articleDetailUrl"]# 获取文章链接tag_list = get_article_tag(Url,user_headers) # 文章标签,列表形式tag = ",".join(tag_list) #列表转为字符串,使用“,”连接Title = article["articleTitle"]# 获取文章标题commentCount = article["commentCount"]# 评论favorCount = article["favorCount"]# 收藏hotRankScore = article["hotRankScore"]# 热度nickName = article["nickName"]# 作者viewCount = article["viewCount"]# 浏览量
上述代码中,我们使用库发送HTTP请求获取热榜xhr数据 。然后,使用json方法处理数据,提取其中的表格数据 。
补充信息(文章标签)
文章标签需要访问文章详情页才能够拿到,所在位置如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img--53)(C:\Users\LIN\\\\-user-\image-.png)]
检查文章源代码,使用搜索可以找到,文章标签在body->下
找到位置了,那就开始写代码…
def get_article_tag(articleDetailUrl,user_headers):"""articleDetailUrl : 文章链接"""data = http://www.kingceram.com/post/requests.get(url=articleDetailUrl,headers=user_headers)# 使用html.parser解析响应文档soup = BeautifulSoup(data.text, 'html.parser')# 获取所有script对象内容script_tag = soup.find('script', text=re.compile('toolbarSearchExt')).text.strip()# 提取特定var变量的值result = json.loads(script_tag[script_tag.find('{'):script_tag.find('}')+1])return result["tag"]
信息保存
获取热榜文章信息后,我们可以将其保存到CSV文件中,并将标题和标签分别保存到文本文件中,为后面的jieba分析作准备 。
def get_hot_list(page):...# 将信息存入对应的列表hot_data_list.append([Title,tag,nickName,commentCount,favorCount,viewCount,hotRankScore,Url])hot_title_list.append(Title)hot_tag_list.extend(tag_list) if __name__ == "__main__":hot_data_list = []# 热榜文章信息列表hot_title_list = [] # 热榜文章标题列表hot_tag_list = [] # 热榜文章标签列表for i in range(4):get_hot_list(i)with open(r"..\file\csdn热榜分析.csv", "w", newline="", encoding="utf-8-sig") as file:writer = csv.writer(file)writer.writerow(["标题", "标签","作者","评论数" ,"收藏量","浏览量", "热度值", "文章链接"])writer.writerows(hot_data_list)with open(r"..\file\csdn热榜标签.txt", "w", newline="", encoding="utf-8") as f_tag:f_tag.writelines(hot_tag_list)with open(r"..\file\csdn热榜标题.txt", "w", newline="", encoding="utf-8") as f_title:f_title.writelines(hot_title_list)