news 2026/6/10 23:23:08

孔夫子旧书网批量抓取工具:自动登录+商品信息提取+Excel导出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
孔夫子旧书网批量抓取工具:自动登录+商品信息提取+Excel导出

本文还有配套的精品资源,点击获取

简介:直接运行就能从孔夫子旧书网批量获取二手书数据,支持自动登录账号、逐条抓取商品页核心字段(书名、作者、出版社、售价、品相、上架时间等),失败链接自动记录到url.txt,全部结果汇总进结果数据C.xlsx。工具基于Python + ChromeDriver实现浏览器自动化,无需修改代码,只要把待采集的商品URL粘贴到info_url.txt里,双击运行spider.py即可启动。配套login.py处理登录逻辑,执行手顺.txt提供分步操作指引,requirements.txt列明所需依赖库,整个流程适配当前网站结构,稳定应对验证码和页面跳转。适合做二手书价格对比、市场供需分析、个人藏书数字化归档或小规模书商选品参考。

1. 项目概述:为什么二手书数据采集值得认真对待

你有没有试过在孔夫子旧书网上查一本绝版书的价格?输入书名,翻三页,发现同一种书有27个卖家,售价从38元到298元不等,品相标注五花八门——“九五品”“近全品”“内页干净”“略有黄斑”,上架时间跨度从2021年到昨天。这时候你真正需要的不是第28个报价,而是一张横向对比表:同一ISBN下所有在售商品的核心字段、价格分布、品相分级、上架节奏。但手动复制粘贴27次?光校对出版社名称(“人民文学出版社” vs “人文社” vs “人民文学”)就能耗掉半小时。这正是我开发这套工具的起点——它不是为写论文凑数据,而是为真实场景里“想快速看清市场”的人服务的。

核心关键词“孔夫子爬虫”“旧书数据采集”“Python自动化”,背后对应的是三个刚性需求:第一,网站有登录墙和动态渲染,传统HTTP请求直接失效;第二,商品页结构嵌套深(价格藏在JS计算后的span里,品相描述混在div文本流中),正则硬扒极易断裂;第三,用户要的是结果,不是代码,所以“无需修改即可运行”不是宣传话术,而是设计底线。整套流程围绕“最小干预原则”构建:你只管往info_url.txt里粘URL,双击spider.py,剩下的——登录、重试、异常隔离、字段清洗、Excel落盘——全部由程序闭环完成。它适配当前网站结构,不是靠猜selector,而是基于对页面DOM生命周期的理解:比如登录后跳转必然触发window.location变更,商品页加载完成必须等待#price_box元素可见且非空,这些细节决定了工具能否在验证码更新、促销弹窗出现、服务器响应延迟时依然稳住不崩。适合谁用?二手书摊主选品前扫一眼区域竞品定价,高校图书馆老师做古籍复本率统计,个人藏书者给自家书架建数字档案,甚至考研党比对历年真题册的二手流通溢价——只要你的需求是“批量看清楚”,它就不是玩具,而是趁手的工具。

2. 整体架构与设计逻辑:为什么选择浏览器自动化而非纯HTTP

2.1 方案选型的底层权衡

很多人看到“爬虫”第一反应是requests+BeautifulSoup,但孔夫子旧书网早已不是静态HTML时代的产品。我试过纯HTTP方案:用requests模拟登录,抓取首页返回的HTML,结果发现关键字段如实时售价、库存状态、卖家信用等级全部由AJAX异步加载,且请求头里藏着动态生成的X-Requested-With和加密签名。更麻烦的是登录环节——2023年Q4起,网站将验证码从图片升级为行为验证(拖动拼图+鼠标轨迹分析),传统OCR或打码平台成功率不足60%,而人工干预又违背“开箱即用”初衷。这时候浏览器自动化就成了唯一可行路径,但并非盲目选Selenium。我对比了三种主流方案:

  • Selenium + ChromeDriver:成熟稳定,支持完整浏览器上下文(Cookie、LocalStorage、Canvas指纹),能自然绕过大部分前端反爬;缺点是资源占用高,启动慢。
  • Playwright:新锐方案,多浏览器支持好,API更现代;但孔夫子部分页面依赖Chrome特有API(如document.fonts.load),在Firefox下偶发渲染异常。
  • Pyppeteer(无头Chrome):轻量,启动快;可一旦遇到需要人工介入的验证码(比如滑块失败后弹出文字验证),无头模式无法交互,整个流程就卡死。

最终选定Selenium+ChromeDriver,不是因为它最先进,而是它最“可靠”。这里的可靠指两层:一是技术层面,ChromeDriver对孔夫子页面的兼容性经过三年迭代验证,login.py里封装的登录逻辑已覆盖扫码登录、账号密码登录、短信验证三种入口;二是工程层面,当某天网站突然增加新的防爬JS(比如检测window.navigator.webdriver属性),我们只需在spider.py开头加一行options.add_experimental_option("excludeSwitches", ["enable-automation"]),而不用重构整个网络栈。这种可维护性,对一个面向非程序员用户的工具至关重要。

2.2 模块化分工:每个文件解决一个明确问题

整个工具包不是单个脚本的堆砌,而是按职责切分的精密齿轮组:

  • login.py:专注“身份建立”。它不处理任何商品数据,只做三件事:启动浏览器、注入登录凭证(从环境变量读取,避免明文写死)、等待登录成功标识(如右上角出现“我的孔网”链接)。这里有个关键设计:登录后不立即跳转,而是主动执行driver.get("https://www.kongfz.com/")强制刷新首页,确保Session完全激活。很多失败案例源于跳转太快,Cookie未同步到新页面上下文。

  • spider.py:作为总控中枢,它只做调度,不做解析。核心逻辑是循环读取info_url.txt的每一行URL,调用统一的fetch_item_info(driver, url)函数,并根据返回值决定写入结果表还是异常日志。这种解耦让后续扩展变得简单——比如你想加价格走势图,只需在fetch_item_info里多提一个“历史价格”字段,spider.py完全不用改。

  • info_url.txt与异常数据url.txt:采用纯文本而非数据库,是刻意为之的降维设计。普通用户打开记事本就能编辑URL,不需要装MySQL或学SQL;异常记录也直接追加到txt,方便排查时用Ctrl+F搜索特定失败原因(比如“timeout”或“404”)。我测试过,当URL列表超过500条时,文本文件的IO性能反而比SQLite更稳定——毕竟我们不是在做高并发服务,而是在解决“把100本书的信息抄下来”这个具体问题。

  • 结果数据C.xlsx:命名带字母“C”是有意为之。早期版本叫“结果.xlsx”,但用户反馈常因误操作覆盖原文件导致数据丢失。现在每次运行都会检查文件是否存在,若存在则自动重命名为“结果数据B.xlsx”,再新建“结果数据C.xlsx”。这种小设计背后是对用户操作习惯的尊重——他们不是工程师,不会每天备份。

2.3 稳定性设计:如何应对网站结构的“温柔变化”

孔夫子旧书网的前端团队很克制,不会频繁大改,但小修小补不断。比如2024年3月,商品页的“品相”字段从<div class="item-condition">挪到了<span style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;" />

简介:直接运行就能从孔夫子旧书网批量获取二手书数据,支持自动登录账号、逐条抓取商品页核心字段(书名、作者、出版社、售价、品相、上架时间等),失败链接自动记录到url.txt,全部结果汇总进结果数据C.xlsx。工具基于Python + ChromeDriver实现浏览器自动化,无需修改代码,只要把待采集的商品URL粘贴到info_url.txt里,双击运行spider.py即可启动。配套login.py处理登录逻辑,执行手顺.txt提供分步操作指引,requirements.txt列明所需依赖库,整个流程适配当前网站结构,稳定应对验证码和页面跳转。适合做二手书价格对比、市场供需分析、个人藏书数字化归档或小规模书商选品参考。


本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 23:19:07

电力电子技术:源网荷储系统的关键装备

在新型电力系统与零碳园区建设进程中&#xff0c;源网荷储一体化系统已成为解决新能源并网波动、提升能源利用效率、保障用电可靠、降低用能成本的核心方案。整套系统的高效运行&#xff0c;离不开大数据、人工智能、物联网等数字化软件技术的调度赋能&#xff0c;更离不开电力…

作者头像 李华
网站建设 2026/6/10 23:03:19

嵌套表格如何处理

在日常办公中&#xff0c;财务报表、审计底稿、供应链明细这类文档里&#xff0c;嵌套表格几乎无处不在。你以为 OCR 把字都认对了&#xff0c;数据就能直接用&#xff1f;实际上&#xff0c;解析完成往往只是麻烦开始。嵌套表格的处理难度远超想象&#xff0c;稍有不慎就会导致…

作者头像 李华
网站建设 2026/6/10 23:02:44

Python if else条件语句详解(非常详细)

前面我们看到的代码都是顺序执行的&#xff0c;也就是先执行第1条语句&#xff0c;然后是第2条、第3条……一直到最后一条语句&#xff0c;这称为顺序结构。但是对于很多情况&#xff0c;顺序结构的代码是远远不够的&#xff0c;比如一个程序限制了只能成年人使用&#xff0c;儿…

作者头像 李华
网站建设 2026/6/10 22:52:52

10个高频更新海报设计素材网站|告别素材同质化,提升创作效率

随着视觉创意创作愈发普及&#xff0c;素材质量直接决定着作品的呈现效果。目前大多数通用素材平台普遍存在内容老旧、风格固化、素材高度重合等问题&#xff0c;不仅让创作者耗费大量时间筛选适配素材&#xff0c;容易陷入灵感枯竭、无素材可用的创作僵局&#xff0c;还会导致…

作者头像 李华
网站建设 2026/6/10 22:52:22

埃及名义雇主公司助力企业实现高效全球化与合规经营

埃及名义雇主公司的角色与优势在埃及做跨境用工&#xff0c;最先碰到的往往不是招聘&#xff0c;而是合规。当地劳动法、税务和社保要求都很细&#xff0c;自己摸索很容易踩坑。埃及的名义雇主公司会把这些琐碎事情接过去&#xff0c;让企业少走弯路。借助这种模式&#xff0c;…

作者头像 李华