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

Python爬虫实战:requests + BeautifulSoup4采集经典标靶网站哲理名言,并导出结构化文件!

㊗️本期内容已收录至专栏《Python爬虫实战》持续完善知识体系与项目实战建议先订阅收藏后续查阅更方便㊙️本期爬虫难度指数⭐ (入门级)福利一次订阅后专栏内的所有文章可永久免费看持续更新中保底1000(篇)硬核实战内容。全文目录 开篇语0️⃣ 前言Preface1️⃣ 摘要Abstract2️⃣ 背景与需求Why3️⃣ 合规与注意事项必写⚠️4️⃣ 技术选型与整体流程What/How5️⃣ 环境准备与依赖安装可复现6️⃣ 核心实现请求层Fetcher7️⃣ 核心实现解析层Parser8️⃣ 数据存储与导出Storage9️⃣ 运行方式与结果展示必写 常见问题与排错强烈建议写1️⃣1️⃣ 进阶优化可选但加分1️⃣2️⃣ 总结与延伸阅读 文末✅ 专栏持续更新中建议收藏 订阅✅ 互动征集✅ 免责声明 开篇语哈喽各位小伙伴们你们好呀我是【喵手】。运营社区 C站 / 掘金 / 腾讯云 / 阿里云 / 华为云 / 51CTO欢迎大家常来逛逛一起学习一起进步我长期专注Python 爬虫工程化实战主理专栏 《Python爬虫实战》从采集策略到反爬对抗从数据清洗到分布式调度持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”让数据价值真正做到——抓得到、洗得净、用得上。专栏食用指南建议收藏✅ 入门基础环境搭建 / 请求与解析 / 数据落库✅ 进阶提升登录鉴权 / 动态渲染 / 反爬对抗✅ 工程实战异步并发 / 分布式调度 / 监控与容错✅ 项目落地数据治理 / 可视化分析 / 场景化应用专栏推广时间如果你想系统学爬虫而不是碎片化东拼西凑欢迎订阅专栏《Python爬虫实战》一次订阅后专栏内的所有文章可永久免费阅读持续更新中。订阅后更新会优先推送按目录学习更高效0️⃣ 前言Preface项目核心本篇我们将使用 Python 的requestsBeautifulSoup4工具抓取经典标靶网站的哲理名言最终产出一份结构化的英文命名数据集文件。读完本文你能获得什么掌握静态网页爬虫的“黄金四步法”请求、解析、清洗、存储。学会编写具备基础容错和重试机制的工业级网络请求代码。获得一份可以直接运行并产出数据的实战源码为后续进阶打下坚实基础。1️⃣ 摘要Abstract项目核心本文旨在通过轻量级库requests与bs4解析目标静态 HTML 页面提取文本与属性并将清洗后的数据持久化至本地 CSV 文件中。读完本文你能获得什么理解合法合规采集数据的重要原则如遵循robots.txt。精通基于 CSS 选择器的 DOM 树解析与异常字段捕获技巧。了解爬虫开发中常见的 403/429 错误排查与进阶优化思路。2️⃣ 背景与需求Why为什么要爬说实话很多人学爬虫一开始只是觉得“酷”但在实际业务中爬虫是数据分析的源泉与信息聚合的核心驱动力。假设我们需要训练一个自然语言处理NLP的“每日一言”大模型或者只是想给自己的博客做一个自动更新的“名言警句”侧边栏手动复制粘贴显然不够极客。我们需要通过自动化手段快速构建属于自己的知识图谱。目标站点与字段目标站点http://quotes.toscrape.com/官方合法的爬虫测试沙盒目标字段清单Quote_Text(名言内容)Author(作者姓名)Tags(名言相关标签由于可能有多个我们将以逗号分隔)3️⃣ 合规与注意事项必写⚠️作为一名资深爱好者我必须提醒你技术无罪但使用技术要有底线。遵循 robots.txt在爬取任何网站前请习惯性地访问域名/robots.txt查看站长允许或禁止抓取的目录。频率控制不要攻击式并发不要像发起 DDoS 攻击一样去请求别人的服务器。加上time.sleep()延时温柔一点细水长流。不采集敏感信息坚决不碰涉及个人隐私、国家安全的数据。不绕过付费/登录限制尊重内容创作者的知识产权我们只获取公开的互联网公共信息。4️⃣ 技术选型与整体流程What/How技术定调静态网页爬取目标网站服务端直接通过 HTML 返回了完整的数据内容没有使用复杂的 Ajax 动态加载或加密混淆。因此这属于最经典的静态网页爬虫。为什么选requestsbs4俗话说“杀鸡焉用牛刀”面对这种结构清晰的静态网站上Scrapy框架有点重用Playwright渲染引擎又太浪费系统资源。requests负责高效建立 HTTP 通信BeautifulSoup的 CSS 选择器写起来直观且优雅是本场景的最佳组合。整体流程图如下English visualization as requested5️⃣ 环境准备与依赖安装可复现无论你是小白还是老鸟拥有一个干净的虚拟环境都是好习惯。加油把这几行命令敲起来Python 版本推荐 Python 3.8 或以上版本。依赖安装pipinstallrequests beautifulsoup4 pandas推荐项目结构quote_spider/ ├── main.py # 入口启动文件 ├── fetcher.py # 网络请求模块 ├── parser.py # 页面解析模块 ├── storage.py # 数据存储模块 └── data/ # 存放输出文件的目录(为了方便你直接复制运行接下来的代码我会整合在一个优雅的脚本中)6️⃣ 核心实现请求层Fetcher这一层是爬虫的“敲门砖”。不带Headers的请求就像没穿衣服在街上跑很容易被服务器封禁。importrequestsimporttimeimportlogging logging.basicConfig(levellogging.INFO,format%(asctime)s - %(levelname)s - %(message)s)deffetch_page(url,retries3):# 必须说明模拟真实浏览器的 Headersheaders{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36,Accept:text/html,application/xhtmlxml,application/xml;q0.9,image/webp,*/*;q0.8,Referer:http://quotes.toscrape.com/# 告诉服务器我从哪里来}forattemptinrange(retries):try:# 必须说明加上 timeout 防止死锁挂起responserequests.get(url,headersheaders,timeout10)response.raise_for_status()# 遇到 4xx 或 5xx 会抛出异常returnresponse.textexceptrequests.exceptions.RequestExceptionase:logging.warning(fFetch failed on{url}. Attempt{attempt1}of{retries}. Error:{e})time.sleep(2**attempt)# 指数退避策略失败后等待 1s, 2s, 4slogging.error(fMax retries reached for{url})returnNone7️⃣ 核心实现解析层Parser拿到 HTML 源码后我们要精准地“摘取”数据。这里采用bs4的 CSS 选择器.select()。frombs4importBeautifulSoupdefparse_quotes(html_content):ifnothtml_content:return[],NonesoupBeautifulSoup(html_content,html.parser)quotes_data[]# 获取列表页中的所有名言块quote_blockssoup.select(div.quote)forblockinquote_blocks:# 提取字段并做容错处理缺失字段怎么办用 .get_text() 前先判断text_elementblock.select_one(span.text)quote_texttext_element.get_text(stripTrue)iftext_elementelseUnknown Quoteauthor_elementblock.select_one(small.author)authorauthor_element.get_text(stripTrue)ifauthor_elementelseUnknown Authortags_elementsblock.select(div.tags a.tag)tags[tag.get_text(stripTrue)fortagintags_elements]tags_str, .join(tags)iftagselseNo Tagsquotes_data.append({Quote_Text:quote_text,Author:author,Tags:tags_str})# 获取下一页的链接next_btnsoup.select_one(li.next a)next_urlfhttp://quotes.toscrape.com{next_btn[href]}ifnext_btnelseNonereturnquotes_data,next_url8️⃣ 数据存储与导出Storage这里我们选择极其通用且易于数据分析的CSV格式。我们使用 URL 或内容的 Hash 来去重这里不需要因为目标网站分页明确无重复但为了严谨我们基于Quote_Text做简单的去重校验。importcsvimportosdefsave_to_csv(data_list,filenamequotes_dataset.csv):ifnotdata_list:return# 去重策略按名言内容去重seenset()unique_data[]foritemindata_list:ifitem[Quote_Text]notinseen:seen.add(item[Quote_Text])unique_data.append(item)# 字段映射与存储keys[Quote_Text,Author,Tags]file_existsos.path.isfile(filename)withopen(filename,a,newline,encodingutf-8)asoutput_file:dict_writercsv.DictWriter(output_file,fieldnameskeys)ifnotfile_exists:dict_writer.writeheader()dict_writer.writerows(unique_data)logging.info(fSuccessfully saved{len(unique_data)}unique records to{filename}.)9️⃣ 运行方式与结果展示必写将上面的代码拼接在一起你可以自行加一个main()函数并在其中加上time.sleep(1)翻页逻辑。启动命令打开你的终端运行python main.py输出位置代码将在当前目录生成一个名为quotes_dataset.csv的文件。示例结果前3行Quote_TextAuthorTags“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”Albert Einsteinchange, deep-thoughts, thinking, world“It is our choices, Harry, that show what we truly are, far more than our abilities.”J.K. Rowlingabilities, choices“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”Albert Einsteininspirational, life, live, miracle 常见问题与排错强烈建议写爬虫总会遇到各种玄学问题别气馁排错过程才是长知识的黄金时刻遇上 403 或 429 怎么办403 通常是因为你的 Headers 太假了尤其是缺失了真实的User-Agent或者Referer。429 说明你的访问频率触碰了站点的警报线。解法加大time.sleep()延迟或者建立代理 IP 池轮换 IP。抓下来的 HTML 全是 JS 脚本的空壳恭喜你遇到了 SPA单页应用如 Vue/React 开发的网站。静态请求拿不到数据了。解法按 F12 打开开发者工具看Network-XHR/Fetch直接去抓取背后的 JSON 数据接口 API。解析报错NoneType object has no attribute get_text这是因为网站结构变化或某个元素本来就不存在。解法在.get_text()前一定要做非空判断参考本文第7节的容错写法。中文乱码怎么破requests有时会猜错网页编码直接在解析前强制声明response.encoding utf-8。1️⃣1️⃣ 进阶优化可选但加分如果你已经玩透了基础的想要挑战更强大的架构并发加速把简单的for循环换成concurrent.futures.ThreadPoolExecutor实现多线程抓取速度起飞但记住线程池越大越容易被封。断点续跑如果网站有 10000 页爬到 5000 页断网了怎么办可以引入 Redis 集合存储已经爬取过的 URL每次开跑前做一次差集比对。定时调度结合服务器的crontab或者更高级的Apache Airflow每天早上 8 点自动抓取更新数据。1️⃣2️⃣ 总结与延伸阅读 恭喜你读到了这里复盘一下我们今天用 Python 完成了一套完整的爬虫闭环从设置带重试机制的网络请求到 CSS 结构化解析最后稳稳地把干干净净的数据存入了CSV中。下一步的打怪升级方向当你遇到需要滑动验证码、需要执行 JavaScript 或者点击翻页的复杂网站时这套基础方案就不够用了。接下来你可以去了解Playwright无头浏览器自动化控制以及工业级的Scrapy爬虫框架。 文末好啦以上就是本期的全部内容啦如果你在实践过程中遇到任何疑问欢迎在评论区留言交流我看到都会尽量回复咱们下期见小伙伴们在批阅的过程中如果觉得文章不错欢迎点赞、收藏、关注哦三连就是对我写作道路上最好的鼓励与支持❤️✅ 专栏持续更新中建议收藏 订阅墙裂推荐订阅专栏 《Python爬虫实战》本专栏秉承着以“入门 → 进阶 → 工程化 → 项目落地”的路线持续更新争取让每一期内容都做到✅ 讲得清楚原理✅ 跑得起来代码✅ 用得上场景✅ 扛得住工程化想系统提升的小伙伴强烈建议先订阅专栏 《Python爬虫实战》再按目录大纲顺序学习效率十倍上升✅ 互动征集想让我把【某站点/某反爬/某验证码/某分布式方案】等写成某期实战评论区留言告诉我你的需求我会优先安排实现(更新)哒~⭐️ 若喜欢我就请关注我叭更新不迷路⭐️ 若对你有用就请点赞支持一下叭给我一点点动力⭐️ 若有疑问就请评论留言告诉我叭我会补坑 更新迭代✅ 免责声明本文爬虫思路、相关技术和代码仅用于学习参考对阅读本文后的进行爬虫行为的用户本作者不承担任何法律责任。使用或者参考本项目即表示您已阅读并同意以下条款合法使用 不得将本项目用于任何违法、违规或侵犯他人权益的行为包括但不限于网络攻击、诈骗、绕过身份验证、未经授权的数据抓取等。风险自负 任何因使用本项目而产生的法律责任、技术风险或经济损失由使用者自行承担项目作者不承担任何形式的责任。禁止滥用 不得将本项目用于违法牟利、黑产活动或其他不当商业用途。使用或者参考本项目即视为同意上述条款,即 “谁使用谁负责” 。如不同意请立即停止使用并删除本项目。

相关文章:

Python爬虫实战:requests + BeautifulSoup4采集经典标靶网站哲理名言,并导出结构化文件!

㊗️本期内容已收录至专栏《Python爬虫实战》,持续完善知识体系与项目实战,建议先订阅收藏,后续查阅更方便~ ㊙️本期爬虫难度指数:⭐ (入门级) 🉐福利: 一次订阅后,专栏内的所有文章…...

APK Installer:重新定义Windows运行Android应用的突破性方案

APK Installer:重新定义Windows运行Android应用的突破性方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows系统上运行Android应用的传统方案往往…...

基于STM32的温室大棚智能监控与无线调控系统设计

摘要:本设计了一种基于STM32的温室大棚智能监控系统。系统采用STM32F103作为主控芯片,集成DHT11温湿度传感器、土壤湿度传感器和C O2传感器实现环境参数采集。通过ESP32-C3 WiFi模块实现数据无线传输和远程控制,OLED屏幕进行本地显示。项目简…...

【卷卷观察】Google I/O 炸场背后:AI 行业正在经历一场“越南战争“

Google I/O 2026 开完了,朋友圈和推特上全是"智能体时代来了"的刷屏。但说实话,我越看越觉得不对劲。不是因为 Google 发布的东西不好——Gemini Spark 确实酷,93 个 Agent 并行写操作系统也确实震撼。而是因为这种"震撼"…...

毕业设计精选【芳心科技】无人机定点投放控制

实物效果图:实现功能:本次设计的目的是实现无人机在空中投放物品的落点计算,系统的核心是单片机,它控制本系统的各种功能,所以它的选择是非常重要的,在本设计中选用的是GD32F103C8T6单片机,这款…...

2026年一键生成论文工具实测排行,哪款真正适合顺利通关?

2026 年学术 AI 论文工具已形成全流程、理工 / 社科、英文 / 中文、免费 / 付费的清晰分化。综合实测排行与场景适配,千笔AI 是中文全能首选,DeepSeek 学术版是理工开源首选,毕业之家是国内毕业专属首选。 一、2026 年实测排行 TOP5&#xff…...

深度探索C++对象模型 学习笔记 第五章 构造、解构、拷贝语意学(1)

请看下面这个抽象基类的声明:你能看出什么问题吗?该类被设计成抽象基类(纯虚函数的存在禁止创建 Abstract_base 的独立实例),但它仍然需要一个显式的构造函数来初始化其唯一的数据成员 _mumble。如果没有这个初始化&am…...

JetBrains IDE试用期重置终极指南:轻松解决IDE过期问题

JetBrains IDE试用期重置终极指南:轻松解决IDE过期问题 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经遇到过这样的困扰:正在专注编码时,突然弹出的"试用期已结…...

Linux 进程从入门到实战(一)

.个人主页:晓风飞专栏:数据结构|Linux|C语言路漫漫其修远兮,吾将上下而求索文章目录进程为什么要存在内存??操作系统进程什么是进程?PCB(进程控制块)操作系统如何管理进程&#xff1…...

遥测数据定义的生产级落地规范指南

在分布式架构与微服务体系中,将 Tracing(链路)、Metrics(指标)、Logs(日志)三种遥测数据有机构建为“三位一体” (3D Observability) 的可观测性网络,是保障系统高可用性的基石。 以…...

Java智能地址解析终极指南:企业级架构设计与高性能实现方案

Java智能地址解析终极指南:企业级架构设计与高性能实现方案 【免费下载链接】address-parse Java 版智能解析收货地址 项目地址: https://gitcode.com/gh_mirrors/addr/address-parse 面对电商、物流、外卖等系统中复杂多变的地址输入格式,传统的…...

AMD Ryzen SMU Debug Tool完整指南:轻松掌握硬件级调试的5个关键步骤

AMD Ryzen SMU Debug Tool完整指南:轻松掌握硬件级调试的5个关键步骤 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地…...

【Linux】网络基础2---Socket编程预备

📌 相关专栏 【Linux专栏】【C语言专栏】【测试专栏】 上期回顾【Linux 】网络基础1 文章目录1. 理解源IP地址和目的IP地址2. 认识端口2.1端口号范围划分2.2 理解 "端⼝号" 和 "进程ID"2.3 源端口号与目的端口号2.4 理解Socket2. 传输层的典型代…...

Python初学者项目练习23--计算圆的面积

一、练习题目 定义一个函数,这个函数用于计算并返回给定半径的圆的面积(要求结果保留两位小数) 二、代码 1.初始版本 代码如下: def area(r):"""作用:用于计算并返回给定半径的圆的面积(要求…...

RAG:终结AI幻觉,让你的大语言模型秒变“知识渊博”!

本文深入浅出地介绍了检索增强生成(RAG)技术,解释了其如何通过结合文档检索与大语言模型(LLM),有效减少AI幻觉现象。文章详细阐述了RAG的工作流程,包括数据分块、嵌入转换、向量数据库存储、问题…...

Go 内存优化骚操作

1. 零内存占位符:struct{}{}原理:struct{} 是空结构体,Go 编译器对其做了特殊处理,它在内存中不占任何空间(大小为 0 字节)。场景 A:实现集合 (Set)map[string]struct{}。比起 map[string]bool&…...

凡亿AD22--AD软件泪滴的添加与移除

一、泪滴的基础认知1.1 泪滴的定义泪滴是PCB设计中,在走线与焊盘、走线与过孔(导孔)连接位置添加的「圆弧状或渐变状过渡结构」,本质是连接部位的“过渡加固层”,肉眼可见为类似水滴或圆弧的形态,核心作用是…...

2025_NIPS_Language Models Don‘t Always Say What They Think: Unfaithful Explanations in Chain-of-T...

文章主要内容与创新点总结 一、主要内容 该研究聚焦大语言模型(LLMs)的思维链(CoT)提示法,核心探讨CoT解释的“不忠实性”——即模型生成的分步推理过程可能无法真实反映其预测的底层逻辑,反而会系统性地误导用户。 研究背景:CoT提示法通过引导模型输出分步推理再给出…...

【项目实训(个人8)】

继续进行法律文书智能摘要系统的开发,新增了几个功能,并优化了用户体验概述本次开发为法律文书智能摘要系统新增了两项核心功能。其一是摘要版本管理,支持同一文档的多版本摘要生成、存储、对比和回滚。用户在生成摘要时,系统自动…...

运放电源端串联磁珠

在运放电源端串联磁珠,是一种常见的高频噪声抑制设计手段,但需结合具体应用场景谨慎使用。以下是关键要点:---作用与目的 - 抑制高频噪声:磁珠对高频信号(通常 >10 MHz)呈现高阻抗,将电源线上…...

Re: Linux系统篇(十八)进程篇·三:深度硬核!全面起底 Linux 进程状态变化与内核链表动态解绑

◆ 博主名称: 晓此方-CSDN博客 大家好,欢迎来到晓此方的博客。 ⭐️Linux系列个人专栏: 【主题曲】Linux ⭐️此方的GitHub: github_此方 ⭐️Re系列专栏:我们思考 (Rethink) 我们重建 (Rebuild) 我们记录 (Record…...

意识的“调谐客观还原”理论

“调谐客观还原”理论,通常称为 Orch-OR,是诺贝尔物理学奖得主罗杰彭罗斯与麻醉学家斯图尔特哈梅罗夫于20世纪90年代初提出的一种极具争议的意识假说。该理论的核心观点是:意识并非产生于神经元之间的经典电化学连接,而是源于神经…...

基于 Python 有限元法的光子微腔仿真:从理论到代码实现

引言:光子微腔与有限元法的结合实例# 安装基础依赖 pip install numpy matplotlib scipy# 安装GMSH网格生成器 pip install gmsh# 安装FEMWELL光子学有限元库 pip install femwell# 安装FEniCSx(FEMWELL的底层依赖) # 对于Ubuntu/Debian系统 …...

5分钟学会AnyFlip电子书一键下载:免费PDF转换终极指南

5分钟学会AnyFlip电子书一键下载:免费PDF转换终极指南 【免费下载链接】anyflip-downloader Download anyflip books as PDF 项目地址: https://gitcode.com/gh_mirrors/an/anyflip-downloader 你是否曾经在AnyFlip上找到一本精彩的电子书,想要永…...

多语言交易所源码/币币交易+期权交易+永续合约+Defi借贷+新币申购+矿机理财/前端uniapp纯源码+后端php

简介: 多语言交易所源码/币币交易期权交易永续合约Defi借贷新币申购矿机理财/前端uniapp纯源码后端php 语言:7种,看图 前端是uniapp纯源码,只有手机端,后端是php框架,清理了后门的,是最开始蓝…...

86、【Agent】【OpenCode】bash 工具提示词(完结)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除 背景 上篇 blog 【Agent】【OpenCode】bash 工…...

根据等价类划分法,**有效等价类**是指符合系统规格说明、应被系统正常接受的输入范围

根据等价类划分法,有效等价类是指符合系统规格说明、应被系统正常接受的输入范围。 题目中密码长度要求为 6–12位(含端点),即最小长度为6,最大长度为12,且为整数位数。 因此,关于密码长度的有效…...

【软考高级架构】案例题考前突击——构建可观测与弹性服务架构的实践设计

案例分析题:构建可观测与弹性服务架构的实践设计 案例背景 某金融科技公司搭建了基于Spring Cloud 的微服务系统,用于支撑其多租户 SaaS 金融平台,核心功能包括用户管理、交易撮合、支付结算、风控审计等模块。由于业务快速扩张、团队并行开发,系统逐渐暴露出如下痛点: …...

Java全栈工程师面试实录:从基础到微服务的深度技术对话

Java全栈工程师面试实录:从基础到微服务的深度技术对话 面试官与程序员的对话 面试官(李哥): 你好,欢迎来参加我们公司的面试。我是李哥,负责技术面试。先简单介绍一下你自己吧。 程序员(张浩&a…...

【YOLOv8多模态融合改进】| IEEE2025 分层特征融合模块HFF 自适应权重 + 三重注意力,强化弱小目标细节保留

一、本文介绍 本文记录的是利用分层特征融合模块HFF改进YOLOv8的可见光-红外双模态目标检测。 HFF(Hierarchical Feature Fusion)通过浅层-深层特征逐元素融合、空间-通道-像素三重注意力建模与自适应加权分配结合,实现多模态来源下不同语义层级特征的自适应重要性学习与精…...