㊗️本期内容已收录至专栏《Python爬虫实战》持续完善知识体系与项目实战建议先订阅收藏后续查阅更方便㊙️本期爬虫难度指数⭐ (基础入门篇)福利一次订阅后专栏内的所有文章可永久免费看持续更新中保底1000(篇)硬核实战内容。全文目录 开篇语0️⃣ 前言Preface1️⃣ 摘要Abstract2️⃣ 背景与需求Why3️⃣ 合规与注意事项Legal Notice4️⃣ 技术选型与整体流程What/How5️⃣ 环境准备与依赖安装Setup6️⃣ 核心实现请求层Fetcher7️⃣ 核心实现解析层Parser8️⃣ 数据存储与导出Storage9️⃣ 运行方式与结果展示Operation 常见问题与排错FAQ1️⃣1️⃣ 进阶优化Optimization1️⃣2️⃣ 总结与延伸阅读Summary 文末✅ 专栏持续更新中建议收藏 订阅✅ 互动征集✅ 免责声明 开篇语哈喽各位小伙伴们你们好呀我是【喵手】。运营社区 C站 / 掘金 / 腾讯云 / 阿里云 / 华为云 / 51CTO欢迎大家常来逛逛一起学习一起进步我长期专注Python 爬虫工程化实战主理专栏 《Python爬虫实战》从采集策略到反爬对抗从数据清洗到分布式调度持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”让数据价值真正做到——抓得到、洗得净、用得上。专栏食用指南建议收藏✅ 入门基础环境搭建 / 请求与解析 / 数据落库✅ 进阶提升登录鉴权 / 动态渲染 / 反爬对抗✅ 工程实战异步并发 / 分布式调度 / 监控与容错✅ 项目落地数据治理 / 可视化分析 / 场景化应用专栏推广时间如果你想系统学爬虫而不是碎片化东拼西凑欢迎订阅专栏《Python爬虫实战》一次订阅后专栏内的所有文章可永久免费阅读持续更新中。订阅后更新会优先推送按目录学习更高效0️⃣ 前言Preface目标使用 Python 爬取 MDN Web Docs 权威 MIME 类型列表产出包含“MIME类型、扩展名、说明、用途”的结构化字典。读完获得掌握requestsBeautifulSoup处理复杂 HTML 表格的实战技巧。学会编写具备“工业级”鲁棒性的爬虫代码结构。获得一份可直接用于 Web 开发项目的mime_types.json配置文件。1️⃣ 摘要Abstract本文将通过分析 MDN 静态页面结构利用BeautifulSoup4定位目标表格并针对“一个 MIME 对应多个后缀”的特殊情况进行数据清洗。最终代码将实现自动化采集、标准化清洗及多格式存储是爬虫爱好者从“写脚本”转向“写工程”的典型案例。2️⃣ 背景与需求Why为什么要爬自动化配置编写静态服务器如 Nginx 逻辑时需要配置大量的Content-Type。文件识别在处理上传文件或流媒体抓取时需要根据后缀名反查其标准 MIME 类型。目标站点MDN - Common MIME types目标字段MIME Type(例:application/javascript)Extension(例:.js)Description(文本说明)Common Use(常见用途)3️⃣ 合规与注意事项Legal Noticerobots.txt经过检查MDN 允许对文档内容进行学术性或技术分享性质的非高频采集。频率控制我们将设置随机 User-Agent 和请求间隔不给服务器造成压力做一名温和的“数字公民”。合规性本项目仅抓取公开展示的技术文档不涉及任何用户敏感数据或破解行为。4️⃣ 技术选型与整体流程What/How选型该页面为标准的服务器端渲染SSR静态页面无需动用 Selenium 等重型武器选用requestsBeautifulSoup4组合追求极速与稳定。技术流程采集Fetch模拟真实浏览器行为获取 HTML 源码。解析Parse提取table标签遍历每一行tr。清洗Clean处理空格、换行符拆分合并的单元格。存储Store持久化到 CSV 和 JSON 文件。5️⃣ 环境准备与依赖安装SetupPython 版本3.9 (推荐 3.10)依赖安装pipinstallrequests beautifulsoup4 pandas推荐项目目录mime_toolkit/ ├── data/ # 存放生成的 CSV/JSON ├── src/ │ ├── __init__.py │ └── scraper.py # 核心逻辑 └── main.py # 运行入口6️⃣ 核心实现请求层Fetcher在抓取时最忌讳“裸奔”。我们需要伪造请求头Headers并处理可能出现的超时异常。importrequestsimportrandomclassMIMEFetcher:def__init__(self):self.urlhttps://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_typesself.headers{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-Language:en-US,en;q0.9}deffetch_html(self):try:responserequests.get(self.url,headersself.headers,timeout15)response.raise_for_status()# 状态码 4xx/5xx 会直接抛出异常returnresponse.textexceptrequests.exceptions.RequestExceptionase:print(f❌ Error during fetching:{e})returnNone7️⃣ 核心实现解析层ParserMDN 的表格每一行tr包含四个td。难点在于某些后缀可能有多个如.jpg和.jpeg我们需要对数据进行去空处理。frombs4importBeautifulSoupclassMIMEParser:staticmethoddefparse(html_content):soupBeautifulSoup(html_content,html.parser)results[]# 定位文章中的表格tablesoup.find(table,class_standard-table)ifnottable:return[]rowstable.find(tbody).find_all(tr)forrowinrows:colsrow.find_all(td)iflen(cols)3:# 清洗数据去除冗余空格和换行extcols[0].get_text(stripTrue)mtypecols[1].get_text(stripTrue)desccols[2].get_text(stripTrue)# 有些行可能没有第四列常见用途usagecols[3].get_text(stripTrue)iflen(cols)3elseN/Aresults.append({extension:ext,mime_type:mtype,description:desc,common_use:usage})returnresults8️⃣ 数据存储与导出Storage我们要同时导出 CSV方便分析和 JSON方便程序调用。Field NameTypeExampleextensionstring.jsonmime_typestringapplication/jsondescriptionstringJSON formatimportpandasaspdimportjsondefsave_data(data):# 保存为 CSV (Using English Filename)dfpd.DataFrame(data)df.to_csv(data/mime_types_registry.csv,indexFalse,encodingutf-8-sig)# 保存为 JSONwithopen(data/mime_types_registry.json,w,encodingutf-8)asf:json.dump(data,f,indent4,ensure_asciiFalse)print(f✅ Data saved:{len(data)}items recorded.)9️⃣ 运行方式与结果展示Operation运行运行main.py即可。示例结果展示extensionmime_typedescriptioncommon_use.aacaudio/aacAAC audioAAC audio.binapplication/octet-streamAny kind of binary dataBinary data.csvtext/csvComma-separated values (CSV)CSV files 常见问题与排错FAQ403 ForbiddenMDN 开启了部分防护如果遇到 403请检查是否缺少Accept请求头或者降低采集频率。HTML 结构变化MDN 会不定期重构若发现find_all抓不到数据请先print(soup.prettify())查看实时结构重点检查standard-table类名。乱码使用utf-8-sig保存 CSV 可以在 Excel 中完美显示中文。1️⃣1️⃣ 进阶优化Optimization多源聚合除了 MDN还可以接入 IANA 的官方数据进行横向比对确保准确性。反向索引建议在代码中生成一个reverse_mapping即以extension为 Keymime_type为 Value 的哈希表实现O ( 1 ) O(1)O(1)的查询速度。1️⃣2️⃣ 总结与延伸阅读Summary通过本次实战我们不仅成功抓取了 MIME Type 对照表更重要的是掌握了从网页表格到结构化数据库的工程方法。下一步建议尝试使用asynciohttpx改造代码实现异步并发。研究如何将此脚本集成到你的自动化部署流程中。 文末好啦以上就是本期的全部内容啦如果你在实践过程中遇到任何疑问欢迎在评论区留言交流我看到都会尽量回复咱们下期见小伙伴们在批阅的过程中如果觉得文章不错欢迎点赞、收藏、关注哦三连就是对我写作道路上最好的鼓励与支持❤️✅ 专栏持续更新中建议收藏 订阅墙裂推荐订阅专栏 《Python爬虫实战》本专栏秉承着以“入门 → 进阶 → 工程化 → 项目落地”的路线持续更新争取让每一期内容都做到✅ 讲得清楚原理✅ 跑得起来代码✅ 用得上场景✅ 扛得住工程化想系统提升的小伙伴强烈建议先订阅专栏 《Python爬虫实战》再按目录大纲顺序学习效率十倍上升✅ 互动征集想让我把【某站点/某反爬/某验证码/某分布式方案】等写成某期实战评论区留言告诉我你的需求我会优先安排实现(更新)哒~⭐️ 若喜欢我就请关注我叭更新不迷路⭐️ 若对你有用就请点赞支持一下叭给我一点点动力⭐️ 若有疑问就请评论留言告诉我叭我会补坑 更新迭代✅ 免责声明本文爬虫思路、相关技术和代码仅用于学习参考对阅读本文后的进行爬虫行为的用户本作者不承担任何法律责任。使用或者参考本项目即表示您已阅读并同意以下条款合法使用 不得将本项目用于任何违法、违规或侵犯他人权益的行为包括但不限于网络攻击、诈骗、绕过身份验证、未经授权的数据抓取等。风险自负 任何因使用本项目而产生的法律责任、技术风险或经济损失由使用者自行承担项目作者不承担任何形式的责任。禁止滥用 不得将本项目用于违法牟利、黑产活动或其他不当商业用途。使用或者参考本项目即视为同意上述条款,即 “谁使用谁负责” 。如不同意请立即停止使用并删除本项目。