笔者 綦枫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自动化技术交流屋》探讨学习哦~