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

news2026/3/15 8:42:33
前言“想建个私人书单却要在豆瓣上一页页复制粘贴”“看到好书想记录但手动整理书名、作者、评分、简介太耗时”“听说爬虫很酷但怕封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解析的核心技巧。反爬虫的基本应对策略。数据清洗与存储的完整流程。爬虫是通往数据世界的一把钥匙。现在钥匙在你手中去探索更多有趣的数据吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2413498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…