Python爬取CSDN全站热榜标题并统计关键词词频实战

沈知远
沈知远
发布时间:2026-10-14| 4人浏览过
原创

本文详细介绍如何使用Python爬取CSDN全站综合热榜的100个文章标题,并通过Jieba库进行分词与词频统计。教程涵盖使用Selenium模拟浏览器滚动加载动态页面、提取HTML源码、利用Lxml解析标题以及统计高频关键词的完整流程,旨在帮助开发者掌握动态网页抓取与数据处理技巧。

前言

近期出差期间,因住宿环境出现蟑螂,为排解无聊,我编写了一些爬虫代码。本文将演示如何爬取CSDN全站综合热榜的前100条标题,提取其中的关键词,并统计各关键词出现的频率。

此方法对其他博主具有参考价值,可辅助分析哪些标题更容易登上热榜。同时,文中将分享解决相关技术问题的具体方法。

环境

开发使用的集成开发环境为Spyder。若对界面风格感到不适,请予以包容,这不影响核心功能。

页面数据获取采用chromedriver驱动,具体原因将在后文说明。

中文分词工具选用Jieba库。

目标爬取页面地址为:https://blog.csdn.net/rank/list

爬虫代码

此处解释为何未直接使用Requests库获取页面源码。原因在于该页面采用动态加载机制,直接请求无法获取完整源码,必须将页面滚动至底部才能加载全部100条排名文章。

因此,我的解决方案是使用chromedriver驱动浏览器,并通过执行JavaScript代码实现页面滚动至底部。

关于chromedriver的下载,需确保其版本与本地Google Chrome浏览器版本一致。以Mac系统为例,可点击左上角Chrome菜单,选择“关于Google Chrome”查看当前版本号。

提供chromedriver官方下载地址:google chrome driver下载地址

简要说明driver的工作原理:它模拟浏览器打开URL的操作,类似于人工点击行为。具体底层原理后续可另行探讨。

直接展示爬虫工具代码。


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Nov  4 17:15:06 2021
@author: huyi
"""
 
from selenium import webdriver
import time
 
# =============================================================================
# 爬取动态下滑加载网页
# =============================================================================
def pa(url):
    driver = webdriver.Chrome('/usr/local/bin/chromedriver')
    driver.get(url)
    js = '''
                let height = 0
        let interval = setInterval(() => {
            window.scrollTo({
                top: height,
                behavior: "smooth"
            });
            height += 500
        }, 500);
        setTimeout(() => {
            clearInterval(interval)
        }, 20000);
    '''
    driver.execute_script(js)
    time.sleep(20)
    source = driver.page_source
    driver.close()
    return source

代码说明

1、该代码封装为一个工具方法,主要功能是使用driver启动浏览器,并通过JavaScript代码模拟向下滚动的操作。

2、代码中包含超时时间设置,可根据实际网络状况进行调整。若网络较慢,需适当增加超时时间,以免页面未完全滚动加载完毕程序即结束。由于宾馆网络状况较差,此处设置了较大的超时值。

3、方法最终返回页面源码,以便后续进行XPath解析。

验证一下

确认已成功获取页面源码。

关键词提取代码

接下来准备关键词提取的方法,直接展示代码。


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Nov  4 21:53:22 2021
@author: huyi
"""
 
 
import jieba.analyse
 
 
def get_key_word(sentence):
    result_dic = {}
    words_lis = jieba.analyse.extract_tags(
        sentence, topK=3, withWeight=True, allowPOS=())
    for word, flag in words_lis:
        if word in result_dic:
            result_dic[word] += 1
        else:
            result_dic[word] = 1
    return result_dic

代码说明

1、该方法提取权重最高的3个词,具体数量可根据需求自行调整。

2、对提取出的相同词汇进行计数,以便后续统计100个标题中的关键词词频。

主程序代码

主程序的主要逻辑是:利用Lxml从页面源码中提取标题元素,获取标题文本后,进行词频统计并输出结果文本。

直接展示主程序代码。


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Nov  4 14:01:38 2021
@author: huyi
"""
from lxml import etree
from tools.dynamic_page import pa
from tools.analyse_word import get_key_word
 
 
csdn_url = 'https://blog.csdn.net/rank/list'
source = etree.HTML(pa(csdn_url))
 
titles = source.xpath("//div[@class='hosetitem-title']/a/text()")
key_word_dic = {}
for x in titles:
    if x:
        for k, v in get_key_word(x).items():
            if k.lower() in key_word_dic:
                key_word_dic[k.lower()] += v
            else:
                key_word_dic[k.lower()] = v
 
word_count_sort = sorted(key_word_dic.items(),
                         key=lambda x: x[1], reverse=True)
 
with open('result.txt', mode='w', encoding='utf-8') as f:
    for y in word_count_sort:
        f.write('{},{}\n'.format(y[0], y[1]))

代码说明

1、关于XPath的使用:虽然Google浏览器支持右键直接复制XPath,但仍建议了解XPath相关语法以便灵活应用。

2、将所有英文单词统一转换为小写,以避免因大小写不同导致的重复统计。

3、结果按词频倒序排列,出现次数最多的关键词排在前面。

验证结果

结果符合预期,Java依然是热度最高的关键词(yyds)。

总结

观察最终统计结果,其中包含部分符号。可通过Jieba停用词表进行过滤,具体筛选策略可根据实际需求调整。

郑重声明:本文案例仅用于技术研究与探索,绝非用于恶意攻击。

若本文内容对您有所帮助,请不吝赐赞,谢谢支持。

以上就是Python 详解爬取并统计CSDN全站热榜标题关键词词频流程的详细内容,更多关于Python 爬取CSDN的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。