CSDN热榜分析:来看看热榜都在写什么

编程入门 行业动态 更新时间:2024-10-11 21:20:56

CSDN热榜分析:来看看热榜<a href=https://www.elefans.com/category/jswz/34/1765403.html style=都在写什么"/>

CSDN热榜分析:来看看热榜都在写什么

文章目录

    • 数据爬取
    • 词云制作
    • 滤除停用词

数据爬取

热榜地址是,先进去再说

from selenium import webdriver
from selenium.webdrivermon.by import By
url = ''
driver = webdriver.Edge()
driver.get(url)

进来之后发现使用了下拉刷新,需要滚到最下面才能查看下一页,所以并没有得到全部热榜博文。这时先滚动一下试试

driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

发现页面的确下拉了。

热榜中共有100篇博客,div的类名是floor-rank-item,所以只要找到100个floor-rank-item,就说明下拉到最下面了。

import time
titleClass = "floor-rank-item"
ts = []
while len(ts) < 100:driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")ts = driver.find_elements(By.CLASS_NAME, titleClass)time.sleep(0.5)

当Title数达到100的时候,就可以进行下一步处理了。

根据类名找到的元素中,刚好给出了序号、博客标题、浏览量、评论量、收藏量、热度以及作者。所以我们可以非常方便地做出一个热榜列表

def decodeOne(text):ws = text.split('\n')return [ws[i] for i in [0, 1, 10, 2, 4, 6, 8]]blogs = [decodeOne(t.text) for t in ts]

然后就可以输出为csv,然后在excel中查看了

import csv
with open('blogs.csv','w',newline='') as f:w = csv.writer(f)w.writerow(["序号", "标题", "作者", "浏览", "评论", "收藏", "热度"])for b in blogs:try: w.writerow(b)except: continue

词云制作

虽然输出了csv格式的数据,但着实看不出来啥,所以接下来用更有表现力的词云来展示一下热榜都是啥。

词云制作有两个关键步骤,一个是分词,可以用著名的jieba库;另一个是画图,可用worldcloud,如果没装可以pip一下。

首先通过jieba处理爬取到的文本

import jiebatext = ','.join([b[1] for b in blogs])
words = jieba.lcut(text)words2 = [w for w in words if len(w)>1]
counts = {w:0 for w in set(words2)} 
for w in words2: counts[w] += 1

其中words2是从words中取出的长度大于1的词,通过set 用集合来排除重复单词后,将其封入counts字典中,最后统计每个词出现的次数。

万事俱备,接下来就可以生成词云了,wordcloud可以直接根据现有的单词列表来生成词云,例如

from wordcloud import WordCloud
font = r"C:\Windows\Fonts\simhei.ttf"
cloud = WordCloud(width=800, height=450, font_path=font)
cloud.generate(" ".join(words2))

WordCloud用于制作词云图,font_path是字体的位置,默认字体不支持中文。在词云模板画完之后,通过generate导入用于绘图的数据,单词之间用空格分开。

至此就已经做好了词云,接下来需要将其画出。因为词云图本质就是一张图片,所以用imshow就可以。为了好看一点,取消坐标轴,同时使用tight_layout,缩小一下边框。

import matplotlib.pyplot as plt
def showCloud(cloud):plt.imshow(cloud)plt.axis("off")plt.tight_layout()plt.show()showCloud(cloud)

如图所示

滤除停用词

在分词领域,那些没有实际意义的连接词,被称为停用词。如果我们想知道哪些领域更容易上热榜,那么诸如使用、实现之类的词就可以算作停用词。

这里仅凭目测,大概没什么意义的词有:‘项目’, ‘使用’, ‘实现’, ‘模型’, ‘数据’, ‘系统’, ‘平台’, ‘原理’, ‘自学’, ‘博客’, ‘推荐’, ‘实践’, ‘实战’, ‘技术’, ‘基于’, ‘如何’, '什么’之类的。当然学习这个词应该是有意义的,可能出现在机器学习或者深度学习中。

from jieba.analyse import set_stop_words
stopLst = ['项目', '使用', '实现', '模型', '数据', '系统', '平台', '原理', '自学', '博客', '推荐', '实践', '实战', '技术', '基于', '如何', '什么']
words3 = [w for w in words2 if w not in stopLst]
cloud = WordCloud(width=800, height=450, font_path=font)
cloud.generate(" ".join(words3))
showCloud(cloud)

最后效果如下

更多推荐

CSDN热榜分析:来看看热榜都在写什么

本文发布于:2024-02-17 17:34:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1694857.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:都在   来看看   CSDN

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!