爬虫开发(5)如何写一个CSDN热门榜爬虫小程序
笔者 綦枫Maple 的其他作品,欢迎点击查阅哦~:
📚Jmeter性能测试大全:Jmeter性能测试大全系列教程!持续更新中!
📚UI自动化测试系列: Selenium+Java自动化测试系列教程❤
📚移动端自动化测试系列:Appium自动化测试系列教程
如何写一个CSDN热门榜爬虫小程序
📚引言
在互联网时代,信息的获取已经变得越来越便捷。然而,面对海量的信息,如何高效地筛选出有价值的内容,成为了一个崭新的小挑战。为此,许多网站提供了“热门”或“推荐”功能,帮助用户快速找到最受欢迎的内容。而CSDN(China Software Developer Network)作为国内知名的开发者社区,里面的热门文章榜单是许多技术爱好者关注的重点。本文中,博主将详细介绍如何编写一个简单的CSDN热门榜爬虫小程序,帮助大家自动化地获取这些热门文章的信息。
声明:本文仅作为技术分享,请勿对任何网站进行攻击,切勿用作非法用途。
📚准备工作
🀚安装必要的Python库
在开始编写爬虫之前,我们需要确保安装了这两个重要的Python库:requests 和 BeautifulSoup。
- requests:用于发送HTTP请求,获取网页内容。
- BeautifulSoup:用于解析HTML文档,提取所需数据。
你可以使用以下命令通过pip安装这两个库:
bash深色版本
pip install requests beautifulsoup4
🀚创建项目文件
在你的工作目录下,创建一个新的Python文件,例如 csdn_hotlist_spider.py,并在其中编写爬虫代码。
✍编写爬虫代码
✍导入所需的模块
首先,我们需要导入 requests 和 BeautifulSoup 模块,以及其他可能用到的标准库模块:
import requests
from bs4 import BeautifulSoup
✍定义函数 get_csdn_hotlist
接下来,我们定义一个函数 get_csdn_hotlist,则个函数将负责获取CSDN热门文章的信息
def get_csdn_hotlist():# CSDN热门文章页面URLurl = 'https://www.csdn.net/nav/ai'# 设置请求头,模拟浏览器访问headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}# 发送GET请求response = requests.get(url, headers=headers)# 解析HTMLsoup = BeautifulSoup(response.text, 'html.parser')# 找到热门文章列表hot_articles = soup.find_all('li', class_='news-list-item')# 遍历热门文章列表,提取所需信息articles = []for article in hot_articles:title = article.find('h2').text.strip()link = article.find('a')['href']summary = article.find('p', class_='summary').text.strip()# 将信息添加到列表articles.append({'title': title,'link': link,'summary': summary})return articles
✍详细解析
-
✍定义URL
url = 'https://www.csdn.net/nav/ai'- 这里我们指定了CSDN热门文章页面的URL。
nav/ai是CSDN的一个子页面,这里会专门展示AI相关的热门文章。
- 这里我们指定了CSDN热门文章页面的URL。
-
✍设置请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' }User-Agent是一个HTTP头字段,用于告诉服务器我们使用的浏览器类型。通过设置这个字段,我们可以模拟浏览器的行为,避免被服务器识别为爬虫而被拒绝访问。
-
✍发送GET请求
response = requests.get(url, headers=headers)- 使用
requests.get方法发送GET请求,获取指定URL的网页内容。headers参数传递了我们之前设置的请求头。
- 使用
-
✍解析HTML
soup = BeautifulSoup(response.text, 'html.parser')- 使用
BeautifulSoup解析返回的HTML内容。response.text是服务器返回的HTML文本,'html.parser'是解析器类型。
- 使用
-
✍找到热门文章列表
hot_articles = soup.find_all('li', class_='news-list-item')- 使用
soup.find_all方法查找所有符合条件的HTML元素。这里我们查找所有类名为news-list-item的<li>元素,这些元素通常包含热门文章的信息。
- 使用
-
✍遍历热门文章列表,提取所需信息
articles = [] for article in hot_articles:title = article.find('h2').text.strip()link = article.find('a')['href']summary = article.find('p', class_='summary').text.strip()# 将信息添加到列表articles.append({'title': title,'link': link,'summary': summary})- 遍历每个热门文章元素,提取文章的标题、链接和简介。
title:使用article.find('h2').text.strip()提取文章标题,并去除首尾空格。link:使用article.find('a')['href']提取文章链接。summary:使用article.find('p', class_='summary').text.strip()提取文章简介,并去除首尾空格。- 将提取的信息以字典形式存储,并添加到
articles列表中。
-
✍返回文章列表
return articles- 最后,返回一下包含所有热门文章信息的列表。
✍主程序入口
在脚本的最后,我们定义主程序入口,调用 get_csdn_hotlist 函数并打印结果。
if __name__ == '__main__':# 获取热门文章列表hotlist = get_csdn_hotlist()# 打印热门文章信息for index, article in enumerate(hotlist, start=1):print(f"{index}. {article['title']}")print(f" 链接: {article['link']}")print(f" 简介: {article['summary']}\n")
✍详细解析
-
🀙主程序入口
if __name__ == '__main__':- 这是一个常见的Python编程模式,用于判断当前脚本是否直接运行。如果是直接运行,则执行下面的代码块。
-
🀙获取热门文章列表
hotlist = get_csdn_hotlist()- 调用
get_csdn_hotlist函数,获取热门文章列表。
- 调用
-
🀙打印热门文章信息
for index, article in enumerate(hotlist, start=1):print(f"{index}. {article['title']}")print(f" 链接: {article['link']}")print(f" 简介: {article['summary']}\n")- 使用
enumerate函数遍历热门文章列表,同时获取每个文章的索引。 - 打印每篇文章的序号、标题、链接和简介。
- 使用
🀙运行程序
将上述代码保存为 csdn_hotlist_spider.py 文件,然后在命令行中运行它:
bash深色版本
python csdn_hotlist_spider.py
程序将会输出CSDN热门文章的标题、链接和简介。
🀙注意事项
🀙遵守网站规则
在爬取任何网站的数据时,请确保阅读并遵守该网站的服务条款,避免因违规操作导致法律问题或账号封禁。CSDN的使用条款通常会明确指出哪些行为是允许的,哪些是禁止的。
🀙请求频率
频繁地向同一网站发送请求可能会导致IP被封禁。建议合理设置请求间隔时间,例如每分钟请求一次,或者使用代理IP池来分散请求。
🀙错误处理
实际应用中应增加异常处理逻辑,比如网络请求失败时的重试机制等。可以使用 try-except 块来捕获和处理异常:
try:response = requests.get(url, headers=headers)response.raise_for_status() # 如果响应状态码不是200,抛出HTTPError异常
except requests.RequestException as e:print(f"请求失败: {e}")
✍结尾
🀙🀚🀛🀜🀝🀞🀟🀠🀡🀐🀑🀒🀓🀔🀕🀖🀘🀗🀏🀎🀍🀌🀋🀊🀉🀈🀇🀆🀅🀃🀂🀁🀀🀄︎🀢🀣🀥🀤🀦🀧🀨🀩🀪
📘 妹妹听后点了点头,脸上露出了满意的笑容。她轻声说道:“原来如此,谢谢你,鸽鸽。看来我不仅要多读书,还要多动手实践,提升自己才行。”
看着她那充满求知欲的眼神,我不禁感叹,学习之路虽然充满挑战,但有这样一位美丽聪慧的伙伴相伴,一切都变得格外有意义。快去和妹妹一起实践一下吧!

👨🎓作者:綦枫Maple
🚀博客:CSDN、掘金等
🚀网易云:https://y.music.163.com/m/user?id=316706413
🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。
🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系处理。
🀐其他:若有兴趣,可以加页面左侧的《Java自动化技术交流屋》探讨学习哦~
相关文章:
爬虫开发(5)如何写一个CSDN热门榜爬虫小程序
笔者 綦枫Maple 的其他作品,欢迎点击查阅哦~: 📚Jmeter性能测试大全:Jmeter性能测试大全系列教程!持续更新中! 📚UI自动化测试系列: SeleniumJava自动化测试系列教程❤ 📚…...
JVM系列之OOM观测准备
OOM, 全称 “Out Of Memory”,即内存用完的意思。JVM 因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时(可分配内存大于需要分配的内存), 就会抛出 java.lang.OutOfMemoryError。在实际的生产应用中,一旦…...
Qt | 开发技能提升档次哈
点击上方"蓝字"关注我们 01、Creator常用快捷键 >>> F1 查看帮助 F2 跳转到函数定义 Shift+F2 声明和定义之间切换 F3 查找下一个 F4 头文件和源文件之间切换 Ctrl+1 欢迎模式 Ctrl+2 编辑模…...
D79【 python 接口自动化学习】- python基础之HTTP
day79 requests模块发送请求 学习日期:20241125 学习目标:http定义及实战 -- requests模块进行get请求带参数&requests模块进行post请求 学习笔记: requests模块进行get请求 import requestsparams{"shouji":"130999…...
C++【日志模块中的writer类】前文中 循环队列用法
用到前文中的循环队列模板 /* ** File name: LogWriter.h ** Author: ** Date: 2024-11-4 ** Brief: 日志写入类 ** Note: 日志写入类,负责将日志写入文件和连接客户端。 ** Copyright (C) 1392019713qq.com All rights reserve…...
Linux:文件管理(一)——文件描述符fd
目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说,如果在电脑上新建了一个空白文档࿰…...
【C++初阶】第3课—类和对象(类的默认成员函数)
文章目录 1. 类的默认成员函数2. 构造函数3. 拷贝构造函数3.1 传值传参3.2 传值返回3.3 深拷贝和浅拷贝3.4 总结 4. 析构函数5. 赋值运算符重载5.1 运算符重载5.2 赋值运算符重载5.3 日期类的实现 6. 取地址运算符重载6.1 const 成员函数6.2 取地址运算符重载 1. 类的默认成员函…...
uni-app初学笔记:文件路径与作用
components:可复用的组件pages:页面(可见/不可见)static:静态资源,存放图片视频等 (相当于vue项目的 assets)mainjs:Vue初始化入口文件App.vue:应用配置,用来配置App全局样式以及监听pages.json :配置页面路…...
小程序-使用 iconfont 图标库报错:Failed to load font
官方默认可以忽略此错误,在清除缓存后首次刷新会显示此错误,重新渲染错误消失 解决方法: 在 iconfont 图标库选择项目设置 选中 Base64 保存,重新点击链接 -> 复制代码到项目中 操作步骤:...
【计网】自定义协议与序列化(一) —— Socket封装于服务器端改写
🌎 应用层自定义协议与序列化 文章目录: Tcp协议Socket编程 应用层简介 序列化和反序列化 重新理解read/write/recv/send及tcp的全双工 Socket封装 服务器端改写 🚀应用层简介 我们程序员写的一个个解决…...
速度革命:esbuild如何改变前端构建游戏 (1)
什么是 esbuild? esbuild 是一款基于 Go 语言开发的 JavaScript 构建打包工具,以其卓越的性能著称。相比传统的构建工具(如 Webpack),esbuild 在打包速度上有着显著的优势,能够将打包速度提升 10 到 100 倍…...
大语言模型---什么是注意力机制?LlaMA 中注意力机制的数学定义
摘要 注意力机制(Attention Mechanism)是一种在深度学习和人工智能中广泛使用的技术,旨在使模型在处理信息时能够重点关注重要的部分,从而提升任务的效率和精度。它最初应用于自然语言处理(NLP)࿰…...
LSA详情与特殊区域
LSA是构成LSDB的重要原材料,在OSPF中发挥很大作用。 报文 通用头部 LS age:LSA寿命,0-3600s Options:可选项 LS type:LSA类型,三要素之一 Link State ID:LSAID 三要素之一 Advertising Ro…...
Python爬虫能处理动态加载的内容吗?
Python爬虫确实可以处理动态加载的内容。动态加载的内容通常是通过JavaScript在客户端执行,这意味着当网页首次加载时,服务器返回的HTML可能并不包含最终用户看到的内容。相反,JavaScript代码会在页面加载后从服务器请求额外的数据࿰…...
Spring Boot Web应用开发:数据访问
数据访问是Web应用的关键部分,Spring Boot简化了这一流程,特别是通过集成Java Persistence API (JPA) 来实现数据持久化。以下是如何在Spring Boot中配置数据源、使用JPA进行数据持久化以及创建访问数据的REST接口。 配置数据源 在Spring Boot中&#…...
【Linux】进程控制-----进程创建与进程终止
目录 前言: 一、进程创建: 1、fork函数 2、创建多个进程: 3、写时拷贝: 二、进程终止: 进程退出码: 退出方式: 编辑 进程异常退出: 缓冲区: 前言࿱…...
【软考速通笔记】系统架构设计师③——信息安全技术基础知识
文章目录 一、前言二、信息安全基础知识2.1 信息安全的基本要求2.2 信息安全的范围2.3 网络安全表现2.4 安全措施包括 三、信息安全系统的组成框架3.1 技术体系:3.2 组织机构体系:3.3 管理体系 四、信息加解密技术4.1 对称密钥加密算法4.2 非对称密钥加密…...
AI安全:从现实关切到未来展望
近年来,人工智能技术飞速发展,从简单的图像识别到生成对话,从自动驾驶到医疗诊断,AI技术正深刻改变着我们的生活。然而,伴随着这些进步,AI的安全性和可控性问题也日益凸显。这不仅涉及技术层面的挑战&#…...
YOLO格式数据集介绍
yolo数据集 yolo数据集标注格式主要是 yolov5 项目需要用到。 标签使用txt文本进行保存。yolo的目录如下所示: dataset ├─images │ ├─train │ │ ├─ flip_mirror_himg0026393.jpg │ │ ├─ flip_mirror_himg0026394.jpg │ │ ├─ flip_…...
Doris 数据集成 LakeSoul
Doris 数据集成 LakeSoul 作为一种全新的开放式的数据管理架构,湖仓一体(Data Lakehouse)融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势,帮助用户更加便捷地满足各种数据处理分析的需求,在企业的大数据体系中已经得到越来越多的应用。 在过去多个版本…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
