Python爬虫实战:手把手教你用 Python 爬取网易新闻每日热文,小白也能轻松上手

Python爬虫实战:手把手教你用 Python 爬取网易新闻每日热文,小白也能轻松上手

在这里插入图片描述

Python爬虫实战:手把手教你用 Python 爬取网易新闻每日热文,小白也能轻松上手

Python爬虫实战:手把手教你用 Python 爬取网易新闻每日热文,小白也能轻松上手,该教程详细讲解如何用 Python 爬取网易新闻每日热文,先介绍爬虫 “请求 - 解析 - 提取 - 保存” 原理及 requests、BeautifulSoup4 等必备库的安装,再逐段解析完整代码:从设置请求头模拟浏览器、发送 HTTP 请求获取网页数据,到通过关键词匹配和类名匹配双方案提取 “今日推荐” 热文,还包含数据去重、Excel 保存(按日期命名)及异常处理与调试模块。同时给出实操步骤,解答爬取不到数据、Excel 保存失败等常见问题,强调爬虫伦理与法律规范,最后提供定时爬取、多频道爬取等功能扩展建议,帮助小白轻松上手打造自动新闻采集工具。
在这里插入图片描述

前言

    Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。

在这里插入图片描述

在这里插入图片描述

🥇 点击进入Python入门专栏,Python凭借简洁易读的语法,是零基础学习编程的理想选择。本专栏专为初学者设计,系统讲解Python核心基础:变量、数据类型、流程控制、函数、文件操作及常用库入门。通过清晰示例与实用小项目,助你快速掌握编程思维,打下坚实根基,迈出自动化办公、数据分析或Web开发的第一步。

🥇 点击进入Python小游戏实战专栏, 寓教于乐,用Python亲手打造经典小游戏!本专栏通过开发贪吃蛇、飞机大战、猜数字、简易版俄罗斯方块等趣味项目,在实践中掌握Python核心语法、面向对象编程、事件处理、图形界面(如Pygame)等关键技能,将枯燥的代码学习转化为可见的成果,让学习编程充满乐趣与成就感,快速提升实战能力。

🥇 点击进入Python小工具实战专栏,告别重复劳动,用Python打造效率神器!本专栏教你开发文件批量处理、自动邮件通知、简易爬虫、桌面提醒、密码生成器、天气查询等实用小工具。聚焦os、shutil、requests、smtplib、schedule等核心库,通过真实场景案例,快速掌握自动化脚本编写技巧,解放双手,显著提升工作与生活效率,让代码真正服务于你的日常。

🥇 点击进入Python爬虫实战专栏,解锁网络数据宝库!本专栏手把手教你使用Python核心库(如requests、BeautifulSoup、Scrapy)构建高效爬虫。从基础网页解析到动态页面抓取、数据存储(CSV/数据库)、反爬策略应对及IP代理使用,通过实战项目(如电商比价、新闻聚合、图片采集、舆情监控),掌握合法合规获取并利用网络数据的核心技能,让数据成为你的超能力。

🥇 点击进入Python项目实战专栏,告别碎片化学习,挑战真实项目!本专栏精选Web应用开发(Flask/Django)、数据分析可视化、自动化办公系统、简易爬虫框架、API接口开发等综合项目。通过需求分析、架构设计、编码实现、测试部署的全流程,深入掌握工程化开发、代码复用、调试排错与团队协作核心能力,积累高质量作品集,真正具备解决复杂问题的Python实战经验。


Python爬虫实战:手把手教你用 Python 爬取网易新闻每日热文,小白也能轻松上手

在信息爆炸的时代,手动筛选每日热门新闻耗时又低效。本文将带你使用Python打造一个网易新闻热文爬虫,自动抓取、整理并保存每日热门新闻,全程代码解析+实操步骤,即使是编程新手也能轻松掌握。

爬取网址:https://news.163.com/domestic/

爬取内容:

在这里插入图片描述

一、爬虫原理与工具准备

在开始编写代码前,我们先了解下爬虫的基本逻辑和所需工具,为后续开发打下基础。

1.1 爬虫核心原理

爬虫本质是模拟浏览器向目标网站发送请求,获取网页HTML数据后,从中提取有用信息(如新闻标题、链接),最后将信息整理并保存。整个过程可概括为“请求-解析-提取-保存”四步。

1.2 必备工具与安装

本次爬虫开发需要用到4个核心Python库,各库功能及安装命令如下:

库名称核心功能安装命令
requests发送HTTP请求,获取网页数据pip install requests
BeautifulSoup4解析HTML文档,提取目标信息pip install beautifulsoup4
pandas数据结构化处理,方便保存为Excelpip install pandas
openpyxl支持pandas将数据写入Excel文件pip install openpyxl

安装完成后,可在命令行输入pip list检查是否安装成功。

二、完整代码解析:从请求到保存全流程

下面我们逐段解析代码,理解每一步的作用和原理,让你不仅会用,还能明白为什么这么用。

2.1 导入所需库

首先导入爬虫过程中需要的所有库,每个库的作用已在注释中说明:

# 发送HTTP请求,获取网页数据import requests # 解析HTML文档,提取目标信息from bs4 import BeautifulSoup # 数据结构化处理,生成DataFrame便于保存import pandas as pd # 控制程序等待时间,避免请求过于频繁import time # 处理文件路径、判断文件是否存在等操作import os # 获取当前日期,用于生成带日期的文件名from datetime import datetime # 正则表达式,用于匹配包含特定关键词的元素(如“今日推荐”“HOT”)import re 

2.2 定义爬虫主函数 crawl_163_news()

这是整个爬虫的核心函数,包含了“请求网页-解析数据-提取信息-去重-保存”的完整逻辑,我们分模块解析。

在这里插入图片描述
模块1:设置请求头,模拟浏览器访问

为什么需要请求头?因为很多网站会识别请求来源,如果发现是爬虫程序(而非正常浏览器),会拒绝提供数据。所以我们需要设置headers模拟浏览器访问:

defcrawl_163_news():# 设置请求头,模拟Chrome浏览器访问 headers ={# User-Agent:告诉网站“我是Chrome浏览器”,核心防反爬字段'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',# 告诉网站可接受的内容格式'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',# 告诉网站可接受的语言(中文)'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',# 告诉网站可接受的压缩格式,减少数据传输量'Accept-Encoding':'gzip, deflate',# 保持连接,提升请求效率'Connection':'keep-alive',# 告诉网站需要升级到HTTPS(如果支持)'Upgrade-Insecure-Requests':'1',}# 目标爬取网址:网易新闻国内频道 url ='https://news.163.com/domestic/'

小技巧:你的浏览器User-Agent可以通过“F12→Network→任意请求→Headers→Request Headers”找到,替换代码中的User-Agent可进一步提升模拟真实性。

模块2:发送HTTP请求,获取网页数据

使用requests.get()发送请求,同时加入异常处理,避免因网络问题导致程序崩溃:

try:print("正在获取网易新闻页面...")# 发送GET请求,超时时间设为15秒(避免程序一直等待) response = requests.get(url, headers=headers, timeout=15)# 检查请求是否成功:若状态码不是200(正常),则抛出异常 response.raise_for_status()# 设置编码为UTF-8,避免中文乱码 response.encoding ='utf-8'# 使用BeautifulSoup解析HTML,指定解析器为html.parser(Python内置,无需额外安装) soup = BeautifulSoup(response.text,'html.parser')
模块3:提取“今日推荐”热文(双方案保障)

为了避免因网站页面结构变化导致爬取不到数据,我们设计了两种提取方案,确保稳定性。

方案1:通过关键词匹配“今日推荐/HOT”板块
先找到包含“今日推荐”“HOT”“热门推荐”关键词的标题元素,再获取其相邻的新闻链接:

# 存储提取的热门新闻 hot_recommendations =[]# 查找包含“今日推荐”“HOT”“热门推荐”的h2/h3/div标签 hot_titles = soup.find_all(['h2','h3','div'], string=re.compile(r'今日推荐|HOT|热门推荐'))for title_element in hot_titles:# 获取关键词标签的父级div容器(通常新闻列表在父容器中) container = title_element.find_parent('div')if container:# 在父容器中找到所有带链接的a标签 links = container.find_all('a', href=True)for link in links:# 提取新闻标题(去除前后空格) title = link.get_text().strip()# 提取新闻链接 href = link['href']# 过滤条件:标题非空、链接非空、标题长度>5(避免无关短链接)if title and href andlen(title)>5:# 确保是网易新闻的有效链接if href.startswith('http')and('news.163.com'in href or'www.163.com'in href): hot_recommendations.append({'标题': title,'链接': href })

方案2:通过类名匹配新闻列表(方案1失效时启用)
如果方案1没找到数据,说明“今日推荐”板块结构可能变了,此时通过类名匹配常见的新闻列表(如类名含“list”“news”“cm”):

# 如果方案1未获取到数据,执行方案2ifnot hot_recommendations:# 查找类名包含list/cm/news的ul标签(新闻列表常用ul包裹)for ul in soup.find_all('ul', class_=lambda x: x and('list'in x or'cm'in x or'news'in x)):# 提取ul中的所有新闻链接for item in ul.find_all('a', href=True): title = item.get_text().strip() href = item['href']# 同样应用过滤条件if title and href andlen(title)>5:if href.startswith('http')and('news.163.com'in href or'www.163.com'in href): hot_recommendations.append({'标题': title,'链接': href })
模块4:数据去重(避免重复新闻)

由于网页中可能存在重复链接(如同一新闻在多个板块出现),需要通过“链接”字段去重:

# 用集合存储已见过的链接(集合特性:元素不重复) seen =set() unique_recommendations =[]for item in hot_recommendations:# 如果链接未见过,加入去重后的列表if item['链接']notin seen: seen.add(item['链接']) unique_recommendations.append(item)
模块5:保存数据到Excel(带日期命名)

将去重后的新闻数据保存为Excel文件,文件名包含当前日期,方便后续查找:

if unique_recommendations:# 获取当前日期,格式为“年月日”(如20250905) current_date = datetime.now().strftime("%Y%m%d")# 生成文件名:网易新闻_20250905.xlsx excel_filename =f"网易新闻_{current_date}.xlsx"# 将列表转换为DataFrame(pandas的表格数据格式) df = pd.DataFrame(unique_recommendations)# 保存为Excel,不保留索引列,使用openpyxl引擎 df.to_excel(excel_filename, index=False, engine='openpyxl')# 打印爬取结果信息print(f"成功爬取 {len(unique_recommendations)} 条今日推荐内容")# 打印文件绝对路径(方便找到文件)print(f"结果已保存到: {os.path.abspath(excel_filename)}")# 打印前5条新闻,快速预览print("\n前5条推荐内容:")for i, item inenumerate(unique_recommendations[:5],1):print(f"{i}. {item['标题']}")
模块6:异常处理与调试(程序稳定性保障)

如果爬取不到数据或出现错误,程序会打印错误信息,并保存网页结构到本地供调试:

else:print("未找到今日推荐内容,可能需要更新选择器")# 生成带时间戳的调试文件名(如debug_page_20250905_143000.html) debug_filename =f"debug_page_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html"# 保存网页完整HTML到本地withopen(debug_filename,'w', encoding='utf-8')as f: f.write(soup.prettify())print(f"已保存页面结构到 {debug_filename} 供分析")# 捕获网络请求相关错误(如超时、404、500)except requests.RequestException as e:print(f"网络请求错误: {e}")# 捕获其他所有未知错误except Exception as e:print(f"发生错误: {e}")

2.3 程序入口:执行爬虫

最后通过if __name__ == "__main__":确保只有直接运行脚本时才执行爬虫:

if __name__ =="__main__":print("开始爬取网易新闻今日推荐...")# 调用爬虫主函数 crawl_163_news()print("程序执行完毕!")

三、实操步骤:运行爬虫并查看结果

代码编写完成后,按照以下步骤运行,轻松获取每日热文:

完整代码:

""" 爬取网易新闻,每日热文 """import requests from bs4 import BeautifulSoup import pandas as pd import time import os from datetime import datetime import re defcrawl_163_news():# 设置请求头,模拟浏览器访问 headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Accept-Encoding':'gzip, deflate','Connection':'keep-alive','Upgrade-Insecure-Requests':'1',} url ='https://news.163.com/domestic/'try:# 发送HTTP请求print("正在获取网易新闻页面...") response = requests.get(url, headers=headers, timeout=15) response.raise_for_status()# 检查请求是否成功# 设置正确的编码 response.encoding ='utf-8'# 使用BeautifulSoup解析HTML soup = BeautifulSoup(response.text,'html.parser')# 查找今日推荐HOT部分 hot_recommendations =[]# 方法1: 查找包含"今日推荐"或"HOT"标题的部分 hot_titles = soup.find_all(['h2','h3','div'], string=re.compile(r'今日推荐|HOT|热门推荐'))for title_element in hot_titles:# 找到相邻的ul列表或包含链接的容器 container = title_element.find_parent('div')if container:# 在容器中查找所有链接 links = container.find_all('a', href=True)for link in links: title = link.get_text().strip() href = link['href']if title and href andlen(title)>5:# 过滤掉过短的标题(可能是无关链接)# 确保链接是有效的新闻链接if href.startswith('http')and('news.163.com'in href or'www.163.com'in href): hot_recommendations.append({'标题': title,'链接': href })# 方法2: 如果上述方法找不到,尝试通过类名查找ifnot hot_recommendations:for ul in soup.find_all('ul', class_=lambda x: x and('list'in x or'cm'in x or'news'in x)):for item in ul.find_all('a', href=True): title = item.get_text().strip() href = item['href']if title and href andlen(title)>5:if href.startswith('http')and('news.163.com'in href or'www.163.com'in href): hot_recommendations.append({'标题': title,'链接': href })# 去重 seen =set() unique_recommendations =[]for item in hot_recommendations:if item['链接']notin seen: seen.add(item['链接']) unique_recommendations.append(item)# 保存结果到Excel文件if unique_recommendations:# 生成文件名:网易新闻+日期 current_date = datetime.now().strftime("%Y%m%d") excel_filename =f"网易新闻_{current_date}.xlsx"# 创建DataFrame df = pd.DataFrame(unique_recommendations)# 保存到Excel df.to_excel(excel_filename, index=False, engine='openpyxl')print(f"成功爬取 {len(unique_recommendations)} 条今日推荐内容")print(f"结果已保存到: {os.path.abspath(excel_filename)}")# 打印前几条结果print("\n前5条推荐内容:")for i, item inenumerate(unique_recommendations[:5],1):print(f"{i}. {item['标题']}")else:print("未找到今日推荐内容,可能需要更新选择器")# 打印页面结构以便调试 debug_filename =f"debug_page_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html"withopen(debug_filename,'w', encoding='utf-8')as f: f.write(soup.prettify())print(f"已保存页面结构到 {debug_filename} 供分析")except requests.RequestException as e:print(f"网络请求错误: {e}")except Exception as e:print(f"发生错误: {e}")if __name__ =="__main__":print("开始爬取网易新闻今日推荐...") crawl_163_news()print("程序执行完毕!")

3.1 运行前检查

  1. 确保已安装所有必备库(参考第二节1.2);
  2. 确认网络正常,能访问https://news.163.com/domestic/
  3. 脚本文件保存为crawl_163_news.py(任意名称均可,后缀为.py)。

3.2 运行爬虫

  1. 打开命令行,切换到脚本所在文件夹(如cd D:\PythonProjects);
  2. 输入命令python crawl_163_news.py,按下回车;
  3. 等待程序执行,控制台会打印爬取进度(如“正在获取网易新闻页面…”“成功爬取20条今日推荐内容”)。

3.3 查看结果

  1. 爬取成功后,在脚本所在文件夹会生成一个Excel文件(如网易新闻_20250905.xlsx);
  2. 双击打开Excel,即可看到“标题”和“链接”两列数据,点击链接可直接跳转到新闻页面。
在这里插入图片描述

四、常见问题与解决方案

在使用过程中,可能会遇到一些问题,这里整理了高频问题及解决方法:

4.1 问题1:爬取不到数据,提示“未找到今日推荐内容”

原因:网易新闻页面结构更新,导致原有的关键词或类名匹配失效。
解决方案

  1. 找到程序生成的debug_page_xxxx.html文件,用浏览器打开;
  2. 按“F12”打开开发者工具,使用“元素选择器”(左上角箭头图标)点击页面中的“今日推荐”板块;
  3. 查看该板块的HTML结构,更新代码中的关键词(如re.compile(r'新关键词'))或类名(如class_=lambda x: x and ('新类名' in x))。

4.2 问题2:Excel保存失败,提示“No module named ‘openpyxl’”

原因:未安装openpyxl库,pandas需要该库支持Excel写入。
解决方案:命令行输入pip install openpyxl,安装完成后重新运行脚本。

4.3 问题3:网络请求错误,提示“Connection timed out”

原因:网络不稳定,或请求频率过高被网站暂时屏蔽。
解决方案

  1. 检查网络连接,确保能正常访问网易新闻;
  2. requests.get()前加入time.sleep(3)(等待3秒),降低请求频率,代码如下:
time.sleep(3)# 加入这行,放在response = requests.get(...)前面 response = requests.get(url, headers=headers, timeout=15)

五、爬虫伦理与法律提示

在使用爬虫时,必须遵守网站规则和法律法规,避免侵权或违规:

  1. 查看robots协议:了解网站允许爬取的范围(网易新闻允许爬取公开新闻内容);
  2. 控制爬取频率:不要频繁发送请求,建议加入time.sleep(2-5),避免给网站服务器造成压力;
  3. 仅用于个人学习:爬取的数据不可用于商业用途,如需公开使用,需获得网站授权;
  4. 尊重版权:新闻内容的版权归网易所有,请勿随意转载或篡改。

六、功能扩展建议

如果你想进一步提升爬虫的实用性,可以尝试以下扩展功能:

  1. 定时爬取:使用schedule库设置每日固定时间自动爬取(如每天早上8点);
  2. 多频道爬取:除了“国内新闻”,增加“国际新闻”“财经新闻”等频道的爬取(修改url为对应频道地址);
  3. 提取新闻正文:在获取新闻链接后,进一步请求链接页面,提取新闻正文、发布时间、作者等信息;
  4. 邮件推送:爬取完成后,通过smtplib库将新闻列表发送到个人邮箱,实现“每日新闻早报”。

通过本文的教程,你已经掌握了网易新闻热文爬虫的开发方法。爬虫的核心在于“理解网页结构+灵活处理异常”,后续可以尝试爬取其他网站(如新浪新闻、腾讯新闻),不断积累经验,打造更强大的数据采集工具。如果在实践中遇到问题,欢迎在评论区交流讨论!

附录:扩展学习资源

  1. 官方资源
  2. 本专栏特色资源
    • 代码资源仓库:ZEEKLOG专属资源在线获取
    • 海量Python教程:关注公众号:xcLeigh,获取网盘地址
    • 一对一答疑:添加微信与博主在线沟通(备注“Python专栏”
  3. 相关书籍推荐:
书名说明
在这里插入图片描述成功的Python包应该安装简便、运行稳定,并能持续可靠地更新。发布一个完美的Python包需要遵循严谨的流程体系,包括系统化测试和代码审查,以及完善的文档体系。值得庆幸的是,Python生态提供了丰富的工具和技术,可实现从项目初始化到版本发布的全流程自动化。
本书深度解析了以自动化和可扩展的方式共享Python 代码的实用流程。通过实际操作,读者可轻松掌握最新打包工具的运用技巧,深入了解包测试和持续集成的方方面面,甚至可获得创建可持续开源项目的专业技巧,包括许可协议、文档编写及培育贡献者社区等关键维度。🥇 点击购买
在这里插入图片描述本书涵盖的主题十分广泛,首先介绍贝叶斯推理及其与深度学习的关系。然后探索各种主流的贝叶斯深度学习方法,展示如何在Python和Tensorflow中实现这些方法。本书文笔优美,通俗易懂,即使是不熟悉贝叶斯统计或深度学习的读者也能阅读学习。我特别喜欢第5章。该章很好地解释了PBP和BBB,列举了在Python和Tensorflow中实现和扩展这些方法的示例。强烈建议有兴趣学习BDL的人士阅读本书。我相信,任何读过本书的人都能更深入地理解贝叶斯深度学习。🥇 点击购买

联系博主

    xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在ZEEKLOG、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

    亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

     愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

    至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


     💞 关注博主 🌀 带你实现畅游前后端!

     🏰 大屏可视化 🌀 带你体验酷炫大屏!

     💯 神秘个人简介 🌀 带你体验不一样得介绍!

     🥇 从零到一学习Python 🌀 带你玩转Python技术流!

     🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!

     💦 :本文撰写于ZEEKLOG平台,作者:xcLeigh所有权归作者所有)https://xcleigh.blog.ZEEKLOG.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


在这里插入图片描述

     📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

Read more

【C++】哈希扩展——位图和布隆过滤器的介绍与实现

【C++】哈希扩展——位图和布隆过滤器的介绍与实现

各位读者大佬好,我是落羽!一个坚持不断学习进步的学生。 如果您觉得我的文章还不错,欢迎多多互三分享交流,一起学习进步! 也欢迎关注我的blog主页:落羽的落羽 文章目录 * 一、位图 * 1. 概念与实现 * 2. std::bitset * 二、布隆过滤器 * 1. 概念 * 2. 布隆过滤器误判率数学推导 * 3. 实现 一、位图 1. 概念与实现 在许多公司的面试题中会考到这样的场景:给40亿个不重复无符号整数,如何快速判断一个数是否在这40亿数中。 如果使用常规思路,每次查询暴力遍历O(N)太慢,排序+二分查找O(NlogN)+O(logN),内存不足以放下这些数据。 数据是否在给定的整型数据中,结果是在或不在,正好是两种状态,那么可以用一个二进制比特位来代表数据是否存在的信息,比特位为1代表存在,比特位为0代表不在。那么,我们可以设计一个用比特位表示数据是否存在的数据结构——位图!

By Ne0inhk
Java外功实战(4)——SpringBoot登录认证全栈实现:Session、统一结果封装、MD5加密与拦截器

Java外功实战(4)——SpringBoot登录认证全栈实现:Session、统一结果封装、MD5加密与拦截器

本文简介 目的:Spring生态为Java后端开发提供了强大支持,但将分散的技术点整合成完整解决方案往往令人困惑。本文将以登录接口为切入点,系统演示如何将IOC/DI、MyBatis数据持久化、MD5加密、Session/Cookie管理、JWT令牌和拦截器机制融合运用,打造企业级认证方案 技术栈:前端:HTML + CSS + JavaScript + Jquery后端:SpringBoot + Mybatis + JWT 搭建环境:数据库:MySQL8.4.0项目结构:maven前端框架:Jquery后端框架:SpringBootJDK:17编译器:IDEA 目录结构: 项目搭建及配置 1.创建SpringBoot3.0.0+项目并添加依赖:Spring Web、MyBatis Framework、MySQL Driver、Lombok 2.初始化数据库: createdatabase spring_

By Ne0inhk
C++ 异常完全指南:从语法到实战,优雅处理程序错误

C++ 异常完全指南:从语法到实战,优雅处理程序错误

🔥草莓熊Lotso: ❄️个人专栏: ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 异常的核心概念与基本语法\ * 1.1 异常的核心思想 * 1.2 基础语法格式和最简示例 * 二. 异常的核心机制:栈展开与匹配规则 * 2.1 栈展开 * 2.2 异常捕获的匹配规则 * 三. 自定义异常体系:大型项目的最佳实践 * 3.1 自定义异常体系设计 && 异常抛出与捕获实战 * 四. 异常的高级用法 * 4.1 异常重新抛出 * 4.2 异常安全:避免资源泄漏 * 4.3 异常规范( noexcept ) * 五. C++ 标准库异常体系 * 结尾:

By Ne0inhk
【Java 开发日记】我们来说说 Redis 中 Zset 的底层实现

【Java 开发日记】我们来说说 Redis 中 Zset 的底层实现

目录 核心概括 一、两种编码方式 1. ziplist / listpack 编码 2. skiplist 编码 为什么需要两种结构? 二、核心数据结构剖析 1. 跳跃表(Skip List)详解 2. 字典(Dict) 三、操作流程示例 四、ZSET ZRANGE 操作序列图 五、总结与要点 面试回答 核心概括 Redis 的 Zset 同时具备两个核心特性: 1. 有序性:元素按分值(score) 从小到大排列。 2. 唯一性:集合中的成员(member) 是唯一的,但分值可以相同(分值相同时,按成员字典序排列)。 为了实现这种高效的、

By Ne0inhk