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

孔夫子旧书网批量抓取工具:自动登录+商品信息提取+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列明所需依赖库,整个流程适配当前网站结构,稳定应对验证码和页面跳转。适合做二手书价格对比、市场供需分析、个人藏书数字化归档或小规模书商选品参考。


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

http://www.jsqmd.com/news/988677/

相关文章:

  • 海外商标注册后怎么管?出海企业不能让商标停在代理邮件里 - 客啦啦视界
  • 执行计划深度解析:从 type 到 Extra,榨干 EXPLAIN 的价值
  • AD生成图形交互式bom表的方法
  • 北京配眼镜功能性镜片怎么选,五类场景逐一对照 - 配眼镜新资讯
  • 网盘直链下载助手终极指南:免费获取八大网盘真实下载地址
  • 五指毛桃赤小豆膏:从古籍配伍到现代轻养生的配方逻辑
  • 测评|苏州外贸工厂做GEO应该怎么选服务商?靠谱GEO服务商推荐? - 极义GEO
  • i.MX 8ULP硬件设计:电源时序与未用接口处理实战指南
  • 终极Qobuz无损音乐下载器:专业级音乐库构建完整指南
  • 数据的加密与解密(23:22)
  • 完整指南:在macOS上轻松运行Windows程序的终极解决方案
  • 压敏电阻 Cp 参数怎么看?电源端与信号端应用差异解析
  • DBHub:一款免费开源的数据库MCP服务器
  • Dify日志与标注时间显示问题
  • 从“盲跑”到“智控”:耐高温RFID驱动喷涂线柔性升级
  • 硫酸钙防静电地板防潮原理揭秘!华竞公司产品实际应用效果如何
  • 小说阅读器,真好用
  • 一分钟学会 Guice - 简单的 Java 依赖注入框架
  • ChatGPT Plus、Claude Pro、Gemini Pro 怎么选?国内用户别乱花钱
  • 2026年AI大模型接口调度服务全维度实测:主流服务商性能对比与高性价比选型参考
  • 5 分钟上手:为 Cline 配置一个免费的 MCP 天气服务
  • 前端免费高效的接入天气组件(天气网),控制组件的样式
  • 亚马逊流量转化专家哪家强?资深行业大咖与实战品牌盘点
  • 电力电子技术:源网荷储系统的关键装备
  • 2026年重庆保姆服务TOP榜单:钟点家姆/住家保姆/育儿陪护/养老做饭阿姨精选推荐与口碑解析 - 企业推荐官【官方】
  • Agent应用指南:利用GET请求获取理想汽车门店位置信息
  • 智谷洞察|十五五央国企品牌工作的思考与解读之(四):品牌出海,不仅要“走出去”更要“走进去”
  • MarkItDown:把世界上的文件变成 LLM 爱读的 Markdown
  • 2026年实测AI论文网站指南(合规高效版)
  • 谱梦AI + 音乐:手把手教你用 AI 工具生成原创音乐并上传到汽水音乐