文章目录
- 数据爬取
- 词云制作
- 滤除停用词
数据爬取
热榜地址是https://blog.csdn.net/rank/list,先进去再说
from selenium import webdriver
from selenium.webdriver.common.by import By
url = 'https://blog.csdn.net/rank/list'
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)
最后效果如下