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

硬核入门!Python爬虫实战:爬取豆瓣读书TOP250,书名+评分+简介,一键生成精美Excel书单(2026避坑版)

前言“想建个私人书单却要在豆瓣上一页页复制粘贴”“看到好书想记录但手动整理书名、作者、评分、简介太耗时”“听说爬虫很酷但怕封IP、怕写代码太难、怕法律风险”别担心今天我们将通过一个经典且实用的项目——爬取豆瓣读书TOP250带你从零开始掌握Python爬虫的核心技能。为什么选豆瓣TOP250结构清晰HTML结构规范非常适合新手练习解析。数据价值高涵盖书名、作者、评分、评价人数、简介等核心信息是制作书单的完美素材。反爬适中有一定的反爬机制如User-Agent检查能学到真实的对抗技巧但又不会像大厂那样难如登天。本实战你将学到️请求伪装如何构造Headers让服务器以为你是真人浏览器。数据提取使用BeautifulSoup和CSS选择器精准定位目标数据。️反爬策略添加延时、随机User-Agent优雅地避免被封禁。数据持久化使用pandas将清洗后的数据一键导出为专业的Excel表格。⚖️合规指南爬虫的道德与法律边界做守法的开发者。哪怕你是编程小白跟着本文步骤30分钟内也能拥有自己的自动化书单收集器一、环境准备工欲善其事在开始之前我们需要安装几个核心库。请确保你已安装 Python 3.8。1. 安装依赖打开终端CMD或Terminal运行以下命令pipinstallrequests beautifulsoup4 pandas openpyxlrequests: 发送HTTP请求获取网页内容。beautifulsoup4: 解析HTML提取数据的神器。pandas: 数据处理与Excel导出。openpyxl: pandas导出Excel所需的引擎。2. 项目结构创建一个文件夹douban_spider内部结构如下douban_spider/ ├── main.py # 主程序代码 ├── books.xlsx # 生成的结果文件运行后产生 └── README.md # 说明文档二、核心代码实战四步走战略第一步分析网页结构与反爬机制打开浏览器推荐Chrome访问 豆瓣读书TOP250。按F12打开开发者工具切换到Network(网络) 标签。刷新页面找到第一个top250请求。观察Request Headers豆瓣会检查User-Agent。如果缺失或是Python默认的python-requests直接返回418错误“I’m a teapot”。对策我们需要伪造一个浏览器的User-Agent。观察HTML结构Elements标签每本书在一个tr classitem标签中。书名div classpl2下的a标签。作者/出版社/价格p classpl标签。评分span classrating_nums。简介span classinq注意部分书可能没有简介。图片链接img的src属性。第二步编写爬虫核心逻辑 (main.py)importrequestsfrombs4importBeautifulSoupimportpandasaspdimporttimeimportrandom# 1. 配置请求头 (伪装成浏览器)HEADERS{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36,Referer:https://book.douban.com/}defget_book_data(url):发送请求并获取单页数据try:responserequests.get(url,headersHEADERS,timeout10)response.raise_for_status()# 豆瓣网页编码通常是utf-8但有时需要手动指定response.encodingutf-8returnresponse.textexceptrequests.RequestExceptionase:print(f请求失败:{e})returnNonedefparse_html(html):解析HTML提取书籍信息soupBeautifulSoup(html,html.parser)books[]# 定位所有书籍条目itemssoup.find_all(tr,class_item)foriteminitems:try:# --- 提取书名 (处理换行符) ---title_divitem.find(div,class_pl2)full_titletitle_div.find(a)[title]iftitle_div.find(a).get(title)elsetitle_div.find(a).get_text(stripTrue)# 有些书名包含副标题用换行符分隔这里简单处理titlefull_title.replace(\n,).replace(/, ).strip()# --- 提取作者/出版社/年份/价格 ---info_pitem.find(p,class_pl)info_textinfo_p.get_text(stripTrue)ifinfo_pelse# 简单分割实际可根据 / 进一步结构化author_pubinfo_text# --- 提取评分 ---rating_spanitem.find(span,class_rating_nums)ratingrating_span.get_text(stripTrue)ifrating_spanelse无评分# --- 提取评价人数 ---votes_spanitem.find(span,textlambdat:tand人评价int)votesvotes_span.get_text(stripTrue).replace(人评价,)ifvotes_spanelse0# --- 提取简介 ---quote_spanitem.find(span,class_inq)summaryquote_span.get_text(stripTrue)ifquote_spanelse无简介# --- 提取封面图链接 ---img_tagitem.find(img)cover_urlimg_tag[src]ifimg_tagelsebooks.append({书名:title,作者/出版信息:author_pub,评分:rating,评价人数:votes,简介:summary,封面链接:cover_url})exceptExceptionase:print(f解析单条数据出错:{e})continuereturnbooksdefmain():all_books[]base_urlhttps://book.douban.com/top250?start{}print( 开始爬取豆瓣读书TOP250...)# TOP250每页25本共10页 (0, 25, 50 ... 225)forpageinrange(10):start_numpage*25urlbase_url.format(start_num)print(f正在爬取第{page1}页:{url})htmlget_book_data(url)ifhtml:dataparse_html(html)all_books.extend(data)print(f✅ 第{page1}页抓取成功共{len(data)}本书)else:print(f❌ 第{page1}页抓取失败跳过)# ️ 关键反爬策略随机延时# 模拟人类阅读速度避免请求过快触发风控sleep_timerandom.uniform(1.5,3.5)time.sleep(sleep_time)# 3. 保存数据到Excelifall_books:dfpd.DataFrame(all_books)file_name豆瓣读书TOP250书单.xlsx# 调整列顺序dfdf[[书名,作者/出版信息,评分,评价人数,简介,封面链接]]# 导出Exceldf.to_excel(file_name,indexFalse)print(f 成功数据已保存至{file_name}共{len(df)}条记录。)else:print( 未获取到任何数据请检查网络或代码。)if__name____main__:main()三、关键点深度解析1. 为什么需要User-Agent服务器通过User-Agent判断客户端身份。如果是Python默认的python-requests/x.x.x豆瓣会直接拒绝服务返回418状态码。解决复制浏览器的UA字符串放入HEADERS字典。进阶可以建立一个UA池每次请求随机选择一个进一步降低风险。2. 数据清洗的细节书名处理豆瓣的书名有时包含换行符\n或副标题分隔符/代码中使用了.replace()进行清理保证Excel整洁。缺失值处理不是所有书都有“简介”或“评分”代码中做了if ... else 无简介的判断防止程序报错崩溃。3. 反爬核心时间延时 (time.sleep)这是新手最容易忽略的一点。错误做法不加延时瞬间发送10个请求。结果IP被暂时封禁。正确做法time.sleep(random.uniform(1.5, 3.5))。模拟人类翻页的不确定性。给服务器喘息时间体现“礼貌爬虫”原则。4. 为什么用 Pandas 而不是csvcsv处理中文编码容易乱码GBk vs UTF-8。pandas的to_excel直接生成.xlsx格式自动处理编码且支持格式化虽然本例未展示但扩展性强。四、运行结果展示运行脚本后你将得到一个名为豆瓣读书TOP250书单.xlsx的文件。书名作者/出版信息评分评价人数简介封面链接百年孤独[哥伦比亚] 加西亚·马尔克斯 / 2011-6-1 / 39.50元9.3582109魔幻现实主义文学巅峰之作…https://img1.doubanio.com/…活着余华 / 2012-8-1 / 20.00元9.4903211讲述一个人一生的故事关于苦难与生存…https://img2.doubanio.com/…………………你可以直接用Excel筛选“评分9.0”的书籍或者根据“作者”排序轻松制作你的年度阅读计划五、常见问题与避坑指南 (FAQ)❌ 问题1运行报错418 Client Error: Im a teapot原因User-Agent 缺失或被识别为爬虫。解决检查HEADERS是否正确赋值。尝试更换一个最新的浏览器UA字符串。❌ 问题2中文乱码原因Excel打开CSV时的编码问题或爬取时解码错误。解决本代码直接使用pandas.to_excel避免了CSV乱码问题。如果必须存CSV请指定encodingutf-8-sig。❌ 问题3数据提取为空原因豆瓣网页结构微调导致CSS选择器失效。解决重新F12检查元素类名class name是否变化如pl2变成了pl3更新find或select的参数。❌ 问题4IP被封禁现象连续请求后所有请求都返回错误。解决增加sleep时间如 5-10秒。暂停程序换个网络环境如切换手机热点再试。进阶使用代理IP池本项目不需要仅针对大规模爬取。六、⚠️ 重要爬虫的道德与法律边界技术无罪但使用需有度。在编写和运行爬虫时请务必遵守以下原则遵守 Robots 协议访问https://www.douban.com/robots.txt。豆瓣允许部分爬取但禁止高频访问和商业化利用。本教程仅限个人学习研究。控制频率不要对服务器造成压力。本代码中的sleep是必须的不要删除。数据用途✅ 允许个人书单管理、数据分析练习、学术研究。❌ 禁止将数据用于商业售卖、搭建镜像网站、公开传播大量数据。隐私保护只爬取公开数据严禁尝试获取用户隐私信息。声明本教程代码仅供学习交流使用。请勿用于任何非法用途。如因滥用代码导致的法律纠纷作者不承担任何责任。七、进阶挑战你能做得更好如果你已经跑通了代码不妨尝试以下挑战提升技能树下载封面图利用cover_url使用requests下载图片保存到本地文件夹建立可视化书库。深入详情页目前只爬了列表页。尝试进入每本书的详情页爬取更详细的“目录”、“书评摘要”、“标签”。数据可视化使用matplotlib或pyecharts绘制“高分书籍出版社分布图”或“评分与评价人数散点图”。自动化推送结合smtplib每周自动抓取新书榜发送邮件推荐给你自己。总结通过这个实战你不仅获得了一份珍贵的豆瓣TOP250书单更重要的是掌握了HTTP请求与响应的本质。HTML解析的核心技巧。反爬虫的基本应对策略。数据清洗与存储的完整流程。爬虫是通往数据世界的一把钥匙。现在钥匙在你手中去探索更多有趣的数据吧

相关文章:

硬核入门!Python爬虫实战:爬取豆瓣读书TOP250,书名+评分+简介,一键生成精美Excel书单(2026避坑版)

前言 “想建个私人书单,却要在豆瓣上一页页复制粘贴?” “看到好书想记录,但手动整理书名、作者、评分、简介太耗时?” “听说爬虫很酷,但怕封IP、怕写代码太难、怕法律风险?” 别担心!今天我们…...

零基础也能搞定!YOLOv5 模型训练全攻略:参数设置详解 + 训练过程监控(2026 避坑版)

前言 “下载了代码,改了路径,一运行就报错 FileNotFoundError?” “训练开始了,但不知道看哪张图,Loss 曲线怎么才算正常?” “跑完 100 个 epoch,结果模型连个影子都检测不到,是不是…...

YOLOv8.3 动态锚框进阶:无需预聚类,物流包裹多尺度检测 AP+3.2%(代码复用性强)

前言 “物流场景包裹大小差异巨大,从信封到巨型纸箱,传统 K-Means 聚类的锚框根本覆盖不过来?” “每次换新数据集都要重新跑一遍聚类,换批数据又得重来,太折腾了!” “用了 YOLOv8 默认配置,小…...

人工智能应用- 机器做梦:06.动态梦境:小结

人类之所以会做梦,是因为大脑中的神经元在睡眠状态下出现不受外部刺激控制的随机激活。这些活动没有外部输入,却依然能拼凑出真实与荒诞交织的梦境。 这一“做梦”过程可以用 CNN 模型来模拟。CNN 通过多层卷积提取不同层次的特征,神经元的激…...

人工智能应用- 机器做梦:05.动态梦境:一步步走进幻想

DeepDream 在模式强化的过程中采用了一种类似“拉近镜头”的操作,生成一个动态的“做梦”过程: 1.初始输入一张随机噪声或真实图片,进行特征强化,得到第二幅图片; 2.对第二幅图片进行放大,并裁剪中心部分&…...

Windows平台升级Node.js

在Windows平台升级Node.js,核心推荐两种方式:官方安装包覆盖安装(适合大多数用户,操作简单)和nvm-windows多版本管理(适合需要频繁切换版本的场景)。以下是详细步骤及注意事项: 一、…...

Harmonyos应用实例98:约分和通分工具

应用实例八:约分和通分工具 知识点:掌握约分和通分的方法。 功能:输入一个分数,工具可以一步步展示其约分过程(找出公因数,分子分母同时除以公因数)。输入两个分数,工具可以展示通分过程(找最小公倍数,化为同分母分数)。 // SimplifyCommonDenominator.ets @Entr…...

Harmonyos应用实例97:找次品动画演示

应用实例七:找次品动画演示 知识点:初步了解“找次品”问题的解决策略,体会优化思想。 功能:用户设定物品总数和次品特点(轻或重)。应用通过动画一步步演示“称量”过程:将物品分组、放在天平上比较、根据结果缩小范围。最终总结出“分成三份,尽量平均分”的最优策略。…...

UG NX 曲面连续性分析

UG NX 的曲面连续性分析功能用于评估两组曲面之间的连接质量。曲面连续性通常分为四个等级: G0(位置连续):曲面在公共边界处直接接触,无间隙。 G1(相切连续):在G0的基础上&#xff0…...

UG NX 曲率梳分析精要

UG NX 曲率梳分析精要 曲率梳通过梳状图形直观显示曲线上的曲率变化(方向与半径),是分析曲线连续性的核心工具。用户可单选或多选曲线进行分析。 通过曲率梳可判定曲线的四种连续类型: 1. G0(位置连续) 定义…...

Chrome DevTools MCP 让 AI 无缝接管浏览器调试会话

Chrome DevTools MCP 让 AI 无缝接管浏览器调试会话 Chrome DevTools MCP 服务器近期新增了一项开发者期待已久的功能:编码助手可以直接接入现有的浏览器会话。 借助这一能力,编码助手可以: 复用已登录的浏览器会话:假设需要修…...

为什么有的程序员一聊到Vibe Coding让 “文科生”接触到了编程会“破防”?

前阵子我帮朋友看一个小后台。功能很简单,需求写在飞书里也就三行字:加一个“批量导出”,按时间筛选,导出成 Excel。朋友说现在有 AI 了,这种活儿不就是一句话的事吗。结果第二天他把“做完”的代码发我,我…...

你们在OpenClaw上的token消耗如何?

我第一次看 OpenClaw 账单,是凌晨两点。那天刚把它接进飞书群,想着让它帮我盯服务器日志,顺便回答点同事的技术问题。第二天一早打开控制台,token 曲线像心电图一样往上窜。我当时第一反应不是“贵”,而是“它到底在干…...

管道病害数据集 管道缺陷分割数据集 DeepLabV3+ 训练代码 (针对管道病害优化)市政管道分割

市政管道-管道病害数据集VOC格式包括deposition/root/obstacle/deformation/crack五种病害600张图片,Labelme标注,标签Mask文件如下,无需额外处理,支持DeepLabV3、PSPnet、Unet、Unet、Segformer、HRnet、Segnet、DDRnet等模型 1…...

Python 异步编程最佳实践

Python 异步编程最佳实践 什么是异步编程? 异步编程是一种编程范式,允许程序同时处理多个任务,而不需要按顺序等待每个任务完成。 同步 vs 异步 同步代码: import timedef fetch_data():time.sleep(1) # 模拟耗时操作return "data"…...

智慧交通-YOLO + DeepSeek 疲劳驾驶智能检测系统 —— 多模态行为识别与风险预警平台 YOLO+DeepSeek+疲劳驾驶检测系统 Pytorch+SpringBoot+Flask+Vu

智慧交通-YOLO+DeepSeek+疲劳驾驶检测系统 PytorchSpringBootFlaskVue 11🚗 YOLO DeepSeek 疲劳驾驶智能检测系统 —— 多模态行为识别与风险预警平台一、项目概览表项目维度内容描述项目名称基于YOLODeepSeek的疲劳驾驶检测系统核心算法YOL…...

Flutter鸿蒙开发:跨平台技术栈融合下的机遇与挑战

摘要: 随着HarmonyOS(鸿蒙操作系统)的蓬勃发展,其独特的分布式理念和多设备协同能力为应用开发带来了新的机遇和挑战。Flutter,作为谷歌推出的高性能跨平台UI框架,因其高效的渲染引擎、丰富的组件库和良好的…...

OAuth授权陷阱与EDR防御规避机制的深度耦合研究

摘要 随着云原生架构的普及与端点检测与响应(EDR)技术的迭代,网络攻击者的战术重心正从传统的漏洞利用向身份滥用与防御规避的深度耦合转移。本文基于2026年3月披露的“OAuth陷阱”与“BlackSanta EDR杀手”等最新威胁情报,深入剖…...

【GitHub项目推荐--Aegis Authenticator:安全优先的开源双因素认证应用】⭐⭐⭐

Screenshots 简介 Aegis Authenticator​ 是由Beem Development开发并维护的开源项目,其核心使命是为Android用户提供一个免费、安全且功能完整的双因素认证(2FA)应用。在数字安全日益重要的今天,双因素认证已成为保护在线账户的…...

拼多多的便宜2元/斤的五常大米能买吗?——关于拼多多平台销售的大米是否建议“尽量少吃”,需要结合实际情况理性分析。以下是一些可能的原因和相关建议:

关于拼多多平台销售的大米是否建议“尽量少吃”,需要结合实际情况理性分析。以下是一些可能的原因和相关建议: ‌1. 低价商品的潜在风险‌ ‌品质参差‌:拼多多以低价商品著称,部分商家可能通过降低生产成本(如使用陈米、劣质米)来维持低价,这类大米口感、营养或安全性…...

【含文档+PPT+源码】基于JAVA的企业人事管理系统的设计与实现

项目介绍本课程演示的是一款 基于JAVA的企业人事管理系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项目…...

Musify10.0.0 | 纯净无广免费音乐软件, 畅听国内外歌曲,需要特殊网络

Musify是一款专注于提供无广告、无需订阅的音乐体验的应用。它支持在线歌曲搜索并提供智能建议,让用户发现新的音乐变得更加容易。此外,用户还可以享受离线听歌的功能,以及导入和导出数据,确保你的音乐库永远不会丢失。 优点包括…...

PiliPlus 2.0.1 | 基于Flutter开发的第三方哔哩,目前最好用的一款

PiliPlus是一款基于Flutter开发的第三方哔哩哔哩客户端,它为用户提供了无广告干扰的观影环境。该应用整合了B站的所有核心功能,包括直播、番剧、影视和分区等内容,并支持原画质播放。最新版增加了记笔记功能,优化了字幕加载速度&a…...

多模态语义评估引擎算法优化:注意力机制改进实践

多模态语义评估引擎算法优化:注意力机制改进实践 1. 引言 多模态语义评估引擎是当前AI领域的热门研究方向,它能够同时处理文本、图像、音频等多种模态的信息,并准确评估它们之间的语义相关性。在实际应用中,这种技术可以用于智能…...

Audio Pixel Studio保姆级教程:音频元数据(ID3)自动写入与批量打标功能

Audio Pixel Studio保姆级教程:音频元数据(ID3)自动写入与批量打标功能 1. 引言:为什么你的音频文件需要“身份证”? 你有没有遇到过这样的烦恼?电脑里下载了一堆音频文件,有的是音乐&#xf…...

GPEN图像增强参数优化:科哥二次开发版不同场景下的最佳设置

GPEN图像增强参数优化:科哥二次开发版不同场景下的最佳设置 1. 引言:为什么需要参数优化? 如果你用过科哥二次开发的GPEN图像增强工具,可能会发现一个有趣的现象:同一张照片,用不同的参数处理&#xff0c…...

零基础部署Qwen2.5-7B-Instruct:5分钟搭建本地智能对话助手

零基础部署Qwen2.5-7B-Instruct:5分钟搭建本地智能对话助手 想体验专业级大模型的强大能力,但又担心云端服务的隐私问题和高昂成本?今天,我们就来手把手教你,如何在5分钟内,零基础搭建一个完全运行在你本地…...

通义千问3-Reranker-0.6B入门必看:轻量模型在移动端边缘部署探索

通义千问3-Reranker-0.6B入门必看:轻量模型在移动端边缘部署探索 1. 模型介绍与核心价值 Qwen3-Reranker-0.6B 是阿里云通义千问团队专门为文本检索和排序任务设计的新一代重排序模型。这个模型的核心使命很简单:帮你从一堆文本中找出最相关的内容。 …...

Qwen-Image-2512与LangGraph结合:复杂场景图像生成系统

Qwen-Image-2512与LangGraph结合:复杂场景图像生成系统 1. 引言 想象一下这样的场景:你需要生成一张"未来城市中,人们骑着飞行自行车穿梭在透明管道里,远处有悬浮的咖啡馆,天空中有彩虹色的人造云朵"的图像…...

网络安全视角下的Fish-Speech-1.5语音API防护策略

网络安全视角下的Fish-Speech-1.5语音API防护策略 想象一下,你刚部署好一个功能强大的语音合成API,它生成的语音自然流畅,客户赞不绝口。突然,你的服务器开始疯狂报警,CPU使用率飙升到100%,API响应时间从毫…...