当前位置: 首页 > news >正文

爬虫开发(5)如何写一个CSDN热门榜爬虫小程序

笔者 綦枫Maple 的其他作品,欢迎点击查阅哦~:
📚Jmeter性能测试大全:Jmeter性能测试大全系列教程!持续更新中!
📚UI自动化测试系列: Selenium+Java自动化测试系列教程❤
📚移动端自动化测试系列:Appium自动化测试系列教程

如何写一个CSDN热门榜爬虫小程序

📚引言

在互联网时代,信息的获取已经变得越来越便捷。然而,面对海量的信息,如何高效地筛选出有价值的内容,成为了一个崭新的小挑战。为此,许多网站提供了“热门”或“推荐”功能,帮助用户快速找到最受欢迎的内容。而CSDN(China Software Developer Network)作为国内知名的开发者社区,里面的热门文章榜单是许多技术爱好者关注的重点。本文中,博主将详细介绍如何编写一个简单的CSDN热门榜爬虫小程序,帮助大家自动化地获取这些热门文章的信息。

声明:本文仅作为技术分享,请勿对任何网站进行攻击,切勿用作非法用途。

📚准备工作

🀚安装必要的Python库

在开始编写爬虫之前,我们需要确保安装了这两个重要的Python库:requestsBeautifulSoup

  • requests:用于发送HTTP请求,获取网页内容。
  • BeautifulSoup:用于解析HTML文档,提取所需数据。

你可以使用以下命令通过pip安装这两个库:

bash深色版本

pip install requests beautifulsoup4

🀚创建项目文件

在你的工作目录下,创建一个新的Python文件,例如 csdn_hotlist_spider.py,并在其中编写爬虫代码。

✍编写爬虫代码

✍导入所需的模块

首先,我们需要导入 requestsBeautifulSoup 模块,以及其他可能用到的标准库模块:

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
✍详细解析
  1. ✍定义URL

    url = 'https://www.csdn.net/nav/ai'
    
    • 这里我们指定了CSDN热门文章页面的URL。nav/ai 是CSDN的一个子页面,这里会专门展示AI相关的热门文章。
  2. ✍设置请求头

    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头字段,用于告诉服务器我们使用的浏览器类型。通过设置这个字段,我们可以模拟浏览器的行为,避免被服务器识别为爬虫而被拒绝访问。
  3. ✍发送GET请求

    response = requests.get(url, headers=headers)
    
    • 使用 requests.get 方法发送GET请求,获取指定URL的网页内容。headers 参数传递了我们之前设置的请求头。
  4. ✍解析HTML

    soup = BeautifulSoup(response.text, 'html.parser')
    
    • 使用 BeautifulSoup 解析返回的HTML内容。response.text 是服务器返回的HTML文本,'html.parser' 是解析器类型。
  5. ✍找到热门文章列表

    hot_articles = soup.find_all('li', class_='news-list-item')
    
    • 使用 soup.find_all 方法查找所有符合条件的HTML元素。这里我们查找所有类名为 news-list-item<li> 元素,这些元素通常包含热门文章的信息。
  6. ✍遍历热门文章列表,提取所需信息

    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 列表中。
  7. ✍返回文章列表

    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")
✍详细解析
  1. 🀙主程序入口

    if __name__ == '__main__':
    
    • 这是一个常见的Python编程模式,用于判断当前脚本是否直接运行。如果是直接运行,则执行下面的代码块。
  2. 🀙获取热门文章列表

    hotlist = get_csdn_hotlist()
    
    • 调用 get_csdn_hotlist 函数,获取热门文章列表。
  3. 🀙打印热门文章信息

    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 的其他作品&#xff0c;欢迎点击查阅哦~&#xff1a; &#x1f4da;Jmeter性能测试大全&#xff1a;Jmeter性能测试大全系列教程&#xff01;持续更新中&#xff01; &#x1f4da;UI自动化测试系列&#xff1a; SeleniumJava自动化测试系列教程❤ &#x1f4da…...

JVM系列之OOM观测准备

OOM, 全称 “Out Of Memory”&#xff0c;即内存用完的意思。JVM 因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时&#xff08;可分配内存大于需要分配的内存&#xff09;, 就会抛出 java.lang.OutOfMemoryError。在实际的生产应用中&#xff0c;一旦…...

Qt | 开发技能提升档次哈

点击上方"蓝字"关注我们 01、Creator常用快捷键 >>> F1 查看帮助 F2 跳转到函数定义 Shift+F2 声明和定义之间切换 F3 查找下一个 F4 头文件和源文件之间切换 Ctrl+1 欢迎模式 Ctrl+2 编辑模…...

D79【 python 接口自动化学习】- python基础之HTTP

day79 requests模块发送请求 学习日期&#xff1a;20241125 学习目标&#xff1a;http定义及实战 -- requests模块进行get请求带参数&requests模块进行post请求 学习笔记&#xff1a; requests模块进行get请求 import requestsparams{"shouji":"130999…...

C++【日志模块中的writer类】前文中 循环队列用法

用到前文中的循环队列模板 /* ** File name: LogWriter.h ** Author: ** Date: 2024-11-4 ** Brief: 日志写入类 ** Note: 日志写入类&#xff0c;负责将日志写入文件和连接客户端。 ** Copyright (C) 1392019713qq.com All rights reserve…...

Linux:文件管理(一)——文件描述符fd

目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说&#xff0c;如果在电脑上新建了一个空白文档&#xff0…...

【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:页面&#xff08;可见/不可见&#xff09;static:静态资源&#xff0c;存放图片视频等 &#xff08;相当于vue项目的 assets&#xff09;mainjs:Vue初始化入口文件App.vue:应用配置&#xff0c;用来配置App全局样式以及监听pages.json :配置页面路…...

小程序-使用 iconfont 图标库报错:Failed to load font

官方默认可以忽略此错误&#xff0c;在清除缓存后首次刷新会显示此错误&#xff0c;重新渲染错误消失 解决方法&#xff1a; 在 iconfont 图标库选择项目设置 选中 Base64 保存&#xff0c;重新点击链接 -> 复制代码到项目中 操作步骤&#xff1a;...

【计网】自定义协议与序列化(一) —— Socket封装于服务器端改写

&#x1f30e; 应用层自定义协议与序列化 文章目录&#xff1a; Tcp协议Socket编程 应用层简介 序列化和反序列化       重新理解read/write/recv/send及tcp的全双工       Socket封装       服务器端改写 &#x1f680;应用层简介 我们程序员写的一个个解决…...

速度革命:esbuild如何改变前端构建游戏 (1)

什么是 esbuild&#xff1f; esbuild 是一款基于 Go 语言开发的 JavaScript 构建打包工具&#xff0c;以其卓越的性能著称。相比传统的构建工具&#xff08;如 Webpack&#xff09;&#xff0c;esbuild 在打包速度上有着显著的优势&#xff0c;能够将打包速度提升 10 到 100 倍…...

大语言模型---什么是注意力机制?LlaMA 中注意力机制的数学定义

摘要 注意力机制&#xff08;Attention Mechanism&#xff09;是一种在深度学习和人工智能中广泛使用的技术&#xff0c;旨在使模型在处理信息时能够重点关注重要的部分&#xff0c;从而提升任务的效率和精度。它最初应用于自然语言处理&#xff08;NLP&#xff09;&#xff0…...

LSA详情与特殊区域

LSA是构成LSDB的重要原材料&#xff0c;在OSPF中发挥很大作用。 报文 通用头部 LS age&#xff1a;LSA寿命&#xff0c;0-3600s Options&#xff1a;可选项 LS type&#xff1a;LSA类型&#xff0c;三要素之一 Link State ID&#xff1a;LSAID 三要素之一 Advertising Ro…...

Python爬虫能处理动态加载的内容吗?

Python爬虫确实可以处理动态加载的内容。动态加载的内容通常是通过JavaScript在客户端执行&#xff0c;这意味着当网页首次加载时&#xff0c;服务器返回的HTML可能并不包含最终用户看到的内容。相反&#xff0c;JavaScript代码会在页面加载后从服务器请求额外的数据&#xff0…...

Spring Boot Web应用开发:数据访问

数据访问是Web应用的关键部分&#xff0c;Spring Boot简化了这一流程&#xff0c;特别是通过集成Java Persistence API (JPA) 来实现数据持久化。以下是如何在Spring Boot中配置数据源、使用JPA进行数据持久化以及创建访问数据的REST接口。 配置数据源 在Spring Boot中&#…...

【Linux】进程控制-----进程创建与进程终止

目录 前言&#xff1a; 一、进程创建&#xff1a; 1、fork函数 2、创建多个进程&#xff1a; 3、写时拷贝&#xff1a; 二、进程终止&#xff1a; 进程退出码&#xff1a; 退出方式&#xff1a; ​编辑 进程异常退出&#xff1a; 缓冲区&#xff1a; 前言&#xff1…...

【软考速通笔记】系统架构设计师③——信息安全技术基础知识

文章目录 一、前言二、信息安全基础知识2.1 信息安全的基本要求2.2 信息安全的范围2.3 网络安全表现2.4 安全措施包括 三、信息安全系统的组成框架3.1 技术体系&#xff1a;3.2 组织机构体系&#xff1a;3.3 管理体系 四、信息加解密技术4.1 对称密钥加密算法4.2 非对称密钥加密…...

AI安全:从现实关切到未来展望

近年来&#xff0c;人工智能技术飞速发展&#xff0c;从简单的图像识别到生成对话&#xff0c;从自动驾驶到医疗诊断&#xff0c;AI技术正深刻改变着我们的生活。然而&#xff0c;伴随着这些进步&#xff0c;AI的安全性和可控性问题也日益凸显。这不仅涉及技术层面的挑战&#…...

YOLO格式数据集介绍

yolo数据集 yolo数据集标注格式主要是 yolov5 项目需要用到。 标签使用txt文本进行保存。yolo的目录如下所示&#xff1a; dataset ├─images │ ├─train │ │ ├─ flip_mirror_himg0026393.jpg │ │ ├─ flip_mirror_himg0026394.jpg │ │ ├─ flip_…...

Doris 数据集成 LakeSoul

Doris 数据集成 LakeSoul 作为一种全新的开放式的数据管理架构,湖仓一体(Data Lakehouse)融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势,帮助用户更加便捷地满足各种数据处理分析的需求,在企业的大数据体系中已经得到越来越多的应用。 在过去多个版本…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...