尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Python+Selenium免登录爬取京东评论:反爬虫对抗与实战指南

发布时间:2026/9/20 11:27:56

资讯中心
01
ARTICLE

Python+Selenium免登录爬取京东评论:反爬虫对抗与实战指南

Python+Selenium免登录爬取京东评论:反爬虫对抗与实战指南
简介面向京东商品评论采集的PythonSelenium爬虫系统解决无需登录状态下自动抓取商品评论的难题适用于电商数据分析、市场调研与竞品观察等场景。压缩包仅8KB包含6个文件涵盖3个Python功能脚本、1份配置文件、1个说明文档与1份开源许可目录结构紧凑便于快速部署与二次开发。目前已有160人学习浏览适合有一定Python基础、希望掌握Selenium自动化及反爬虫应对策略的开发者。通过这套代码读者能理解评论区域定位、数据提取、日志记录与MySQL存储的完整流程并学习在不登录情况下规避常见校验的方法为自建爬虫项目提供可复用模板。资源体量虽小但逻辑完整从浏览器模拟到数据落库形成闭环。 做电商数据采集的人应该都清楚京东的商品评论区是个信息量很大的地方——用户真实反馈、产品质量问题、配送体验全在里面。但真要爬下来一堆人卡在登录墙和风控上。今天我把这套基于 PythonSelenium 的京东评论爬虫系统完整拆一遍核心优势就一句话无需登录直接采集。适合刚开始接触爬虫的 Python 学习者也适合做电商竞品分析、选品调研的运营和技术同学希望能帮到有类似需求的你。这套东西解决的关键问题有两个一是绕开手动登录的麻烦二是尽量降低触发验证码的概率。我会从整体设计思路、环境搭建、核心代码逻辑、风控对抗这几个维度展开把每一步为什么这么做讲清楚最后再聊聊我实际跑数据时踩过的坑。1. 这个爬虫系统的整体设计与思路拆解1.1 为什么选 Selenium 而不是 requests如果你在网上搜“京东评论爬虫”大概率会看到两类方案一类是纯 Python 的 requests 逆向参数另一类就是今天要讲的 Selenium 方案。先说 requests 那类。京东评论数据其实有一个半公开的接口接口的 URL 规律并不难找难点在于请求头里那些动态加密参数比如sign、timestamp以及跟用户行为绑定的 cookie 校验。这些参数是前端 JS 实时生成的需要读混淆过的 JS 代码、还原加密流程也就是所谓的“逆向”。这套路虽然请求效率高但维护成本极高——京东前端一改版逆向代码就可能直接失效你得重新分析。而且说实话对于很多只是临时取一批数据的人来说投入产出比太低。Selenium 的思路就完全不同。它直接驱动一个真实的浏览器内核页面里的 JS、加密逻辑、cookie 生成全部由浏览器自己搞定我只需要模拟人的操作打开页面、滚动、点击“下一页”。就算京东的加密算法升级了只要浏览器能正常加载页面我的脚本就能继续跑。这相当于把“对抗加密”的问题转化成了“对抗真人检测”的问题而后者用缓速、随机等待就能解决大部分。选 Selenium 的另一个原因是调试效率高。脚本跑到哪一步、页面加载什么样都能直接看到不像 requests 请求出错时只能对着状态码和返回报文猜。之前我帮朋友写过一个小工具从零开始到能稳定采集京东某品类前几十页评论一个下午就搞定了这个速度在逆向方案下几乎不可能。1.2 免登录到底是怎么回事说到“无需登录”这四个字很多人第一反应是“破解了登录逻辑”。其实不是京东评论接口在前端本来就是公开可访问的只是你直接拿普通请求工具去访问会触发风控被要求登录或验证。这套系统能免登录的核心在于两点第一使用无头浏览器也可以不开无头看具体场景加载商品详情页获得一个合法的浏览器上下文环境包括正常的User-Agent、Cookie 和 JS 执行环境。对于服务器来说这就是一个普通访客而不是“非浏览器客户端”。第二评论数据本身不属于高敏感数据京东的策略通常不会强制登录才能看评论。只要触发频率和普通用户相似服务器就没有理由弹出登录框。实际跑下来单 IP 低频采集几分钟一次基本不会触发风控。不过要泼一盆冷水就算有这层“免登录”设计也不代表可以随意高频请求。并发开得太大、请求间隔小于 1 秒照样会被抓后续章节我会专门聊风控对抗。1.3 系统核心架构速览整个系统做的事情可以分成三步接收商品 URL从中解析出商品 IDSKU ID。用 Selenium 模拟浏览器访问商品页面构建合法会话。请求评论接口解析返回的 JSON翻页抓取直到采集完成或达到设定上限。流程不复杂但每步都有细节。先把方向理清楚后面写代码才有底气。下面就从环境准备开始一步步把它跑起来。2. 环境准备与依赖安装指南2.1 Python 与 Selenium 的安装现在 Python 版本比较新建议装 3.8 以上版本直接用 pip 安装 Selenium 即可pip install selenium很多人装完 Selenium 就跑结果报WebDriverException这是因为还缺浏览器驱动。Selenium 4.6 以上版本自带 Selenium Manager可以自动下载匹配的 ChromeDriver但我个人的建议还是手动配一次驱动文件省得每次自动下载时网络出问题。步骤很简单先看你本地 Chrome 的版本号浏览器地址栏输入chrome://version记下版本号。去 ChromeDriver 镜像站下载对应版本的驱动。把chromedriver.exeWindows或chromedrivermacOS/Linux放到任意目录然后在代码里指给它路径。这里有个大坑Chrome 版本和 ChromeDriver 版本必须严格对应。之前我吃过一次亏Chrome 自动更新到 120驱动还是 114结果一直报session not created: This version of ChromeDriver only supports Chrome version 114。解决办法就是重新下载匹配版本的驱动没有捷径。2.2 项目配置文件与目录结构拿到压缩包之后建议先看目录结构。一个典型的 Selenium 爬虫项目会包含这几个部分jd-comment-spider/ ├── main.py # 主入口控制采集流程 ├── config.py # 配置文件放商品ID、页数、延迟等 ├── crawler.py # 核心爬虫逻辑 ├── parser.py # 评论数据解析 ├── utils.py # 辅助函数如保存CSV/JSON ├── drivers/ # 存放浏览器驱动 └── data/ # 采集结果输出目录config.py里通常会有这些参数解压后第一件事就是把它们改成你自己的# config.py PRODUCT_ID 100012043978 # 京东商品IDURL里能看到 PAGE_LIMIT 50 # 最多采集页数每页10条 DELAY_RANGE (2, 5) # 每次请求前随机等待秒数 OUTPUT_FORMAT json # 支持 json / csv HEADLESS False # 是否无头模式调试时建议False商品 ID 怎么找打开京东任意商品详情页地址栏item.jd.com/100012043978.html中间那串数字就是。换成你要采集的商品填进去就能跑了。3. 核心实现从商品页面到评论文本3.1 第一步创建浏览器会话这一段是整个爬虫的基石。Selenium 启动浏览器的配置有很多讲究参数设置不当容易出现各种奇怪问题。下面这段代码是经过实测的# crawler.py from selenium import webdriver from selenium.webdriver.chrome.options import Options def create_driver(): options Options() options.add_argument(--headlessnew) # 无头模式不显示浏览器界面 options.add_argument(--disable-blink-featuresAutomationControlled) # 去掉自动化标记 options.add_argument(--no-sandbox) options.add_argument(--disable-dev-shm-usage) options.add_argument(--window-size1920,1080) options.add_experimental_option(excludeSwitches, [enable-automation]) options.add_experimental_option(useAutomationExtension, False) driver webdriver.Chrome(optionsoptions) driver.execute_cdp_cmd(Page.addScriptToEvaluateOnNewDocument, { source: Object.defineProperty(navigator, webdriver, {get: () undefined}) }) return driver解释一下几个关键参数--disable-blink-featuresAutomationControlled关闭浏览器内核的自动化控制标记避免被网站识别为 Selenium 驱动。excludeSwitches里的enable-automation去掉地址栏下方的“Chrome 正受到自动测试软件控制”的提示条这个提示条本身就是个明显的机器人特征。execute_cdp_cmd覆盖navigator.webdriver属性这一步是风控对抗的关键很多网站会通过读取这个属性来判断是不是机器人把它覆盖成undefined能极大降低被识别概率。实测下来加上这几层伪装之后京东风控对 Selenium 的识别率会明显下降。如果你还想进一步增强伪装效果可以考虑引入undetected-chromedriver或selenium-stealth这两个库它们专门针对浏览器指纹做了优化。不过这两个库偶尔会有兼容性问题建议先跑通基础版再按需增强。3.2 第二步解析商品 ID 并请求评论接口很多人在这个环节会走弯路——用 Selenium 去定位页面上的“商品评论”按钮再模拟点击、等待加载。这样做也能行但效率很低每次翻页都要等整个页面渲染完而且页面结构一变脚本就崩。更聪明的做法是直接请求评论接口。京东有一个公开的评论接口URL 格式是https://club.jd.com/comment/productPageComments.action?productId100012043978score0sortType5page0pageSize10isShadowSku0fold1参数说明productId商品 ID。score评分筛选0 表示全部1 差评2 中评3 好评4 追评。sortType排序方式5 是默认推荐排序。page页码从 0 开始。pageSize每页条数默认 10最大好像可以调到 50。fold是否折叠重复评论1 是折叠。这个接口本身不需要登录返回的是 JSON 格式里面包含comments数组每条评论的详细数据、productCommentSummary评论总数、好评率汇总。直接用 Selenium 的driver.get(url)访问这个接口然后读取页面文本就是 JSON 数据。但注意最好先让浏览器打开商品详情页再访问评论接口这样能带上浏览详情页时种下的 cookie。顺序反了或直接冷启动访问接口也大概率被风控拦截。有个小技巧页面打开后别急着拿数据先time.sleep(2)等几秒让接口数据完整加载出来。京东的接口返回速度虽然快但请求太急还是会被限流。def fetch_comments(driver, product_id, page): url ( fhttps://club.jd.com/comment/productPageComments.action f?productId{product_id}score0sortType5 fpage{page}pageSize10isShadowSku0fold1 ) driver.get(url) time.sleep(2) body driver.find_element(By.TAG_NAME, body).text return json.loads(body)3.3 第三步解析 JSON 数据接口返回的 JSON 结构有点嵌套提取评论时要注意字段层级。下面是一个简化的结构{ comments: [ { id: 123456, content: 这个商品真的很不错快递也很快, creationTime: 2024-02-01 10:30:00, score: 5, nickname: j***d, productColor: 黑色, productSize: L, usefulVoteCount: 12 } ], productCommentSummary: { commentCountStr: 5万, goodRate: 0.97 } }写解析代码时有几个经验comments可能有 0 条或 10 条要判断空数组再跳出循环否则会死循环翻页。京东的评论接口支持“只看当前商品当前规格”的筛选但这需要额外的skuId参数通常爬全量评论时不需要加。有“追评”的评论comments里还会有afterComments字段里面放着追评内容和时间。如果你做产品质量分析追评特别重要很多用户会在追加评论里反馈使用一段时间后的问题。提取核心字段保存为 JSON 或 CSV 即可推荐保存成 JSON 或 Excel方便后续用 Pandas 做数据分析。CSV 容易因为评论内容里有换行符导致错乱这点后面表格里再细说。4. 风控对抗与降低封禁概率的实战手段4.1 京东风控的几个典型触发点京东风控系统不是摆设我实跑过程中总结出几个典型的触发场景访问频率过高同一 IP 每秒请求超过一定阈值直接返回验证码页或封禁。无浏览器特征UA 缺失、没有 JS 执行能力直接拒绝或跳登录。行为轨迹异常点击速度、页面停留时间、鼠标移动轨迹全部一致或完全没有。同 IP 大量不同商品短时间内用一个 IP 爬取大量商品属于明显的采集行为。触发风控最直接的表现就是弹出滑块验证页面或者接口返回数据变成空。一旦触发通常要等几分钟到几小时严重的会直接封 IP 一段时间。4.2 降低被检测概率的实操方法这里说几个我在实战中验证过有效的手段上手也简单限制请求频率。这是最基础也最有效的一招。把每次请求的间隔设置在 2-5 秒模拟真人浏览速度。如果感觉 5000 条评论要跑太久可以接受把延迟稍微降到 1-2 秒但别低于 1 秒也别完全固定间隔随机化很重要。固定间隔时间长了会被模型识别成定时任务。轮换 User-Agent。虽然 Selenium 本身带着浏览器 UA但如果一个浏览器实例跑的时间太长切换 UA 会更安全。可以在启动新会话时随机选一个手机版或桌面版的 UA模拟不同设备。限制单次采集量。我个人的经验是单个 IP 单个浏览器实例单次采集不要超过 2000 条评论。采完一批停一会儿或者换个代理 IP 再继续。虽然“无需登录”让整个流程方便了很多但并不代表服务器不设防怂一点才是细水长流的做法。使用住宅代理。如果单 IP 确实不够用可以考虑接住宅代理池这样的话即使每个 IP 只采很少的量整体也能跑很多数据。这一步需要额外花钱但对大规模采集来说几乎躲不开。提醒一句别用那些免费代理不稳定而且 IP 信誉极低更容易触发风控。如果你面对的是滑块验证可以注意一下滑块验证本质上是鼠标轨迹 拖拽行为分析单纯用 Selenium 的ActionChains快速拖动成功率很低。需要模拟人手的先快后慢、微调停顿才能过。但我不建议把这部分写死在采集工具里一旦你花大力气做了滑块算法京东改一下滑块参数维护成本立刻上来。实际工程中看到滑块验证就暂停、换 IP、换号比硬刚验证码效率高多了。5. 高频报错排查与数据质量校验5.1 最常见的三个运行时报错我在调试这套爬虫系统时遇到最多的三个问题这里把排查思路也写出来。报错原因解决办法SessionNotCreatedExceptionChrome 与 ChromeDriver 版本不匹配下载对应版本的驱动或更新 ChromeJsonDecodeError请求接口被风控拦截返回的是 HTML 验证页而非 JSON降低请求频率检查是否命中滑块/验证码必要时换 IPTimeoutException等待元素或页面加载超时检查网络延长page_load_timeout确认窗口大小部分接口需要非移动端 UA第一个和第三个比较好办第二个需要仔细说明一下。当你看到json.decoder.JSONDecodeError时别急着改代码先去浏览器里手动访问一下那个接口地址看是正常返回 JSON 还是返回 HTML 页面。如果手动访问都返回验证码说明 IP 被风控了最佳的应对方式就是切换网络或代理然后继续。5.2 数据完整性校验爬虫跑完不等于数据没问题我还会做三个校验确保数据可用数量校验接口返回的maxPage字段会告诉你总页数。拿这个值和实际抓到的页数对比如果少了说明中间有翻页失败但脚本没报错可能是接口返回了空数组。建议每页都检查comments长度连续 3 次空数组再中断重试。编码校验评论内容偶尔会有 emoji 或特殊符号JSON 里没问题但如果你保存成 CSV 再用 Excel 打开可能会乱码。推荐写 UTF-8 with BOM 编码或者干脆存 JSON 用 Pandas 处理。这里给一个保存 CSV 时的编码设置df.to_csv(comments.csv, indexFalse, encodingutf-8-sig)去重校验同一商品有多个颜色、规格的 SKU评论可能会出现重叠。用comment_id字段去重否则统计结果会有偏差。我写过一个简单的校验脚本把抓回来的评论按 ID 去重发现重复率在 1% 左右看起来不多但做差评分析时会直接影响结论。5.3 其他容易忽略的小细节最后补几个容易被忽略、但实际跑起来很重要的细节。第一HEADLESS模式可以开但第一次调试建议关掉亲眼看看浏览器走到哪一步、弹了什么框。等确认流程稳定之后再切无头模式能省掉不少自己脑补的排查时间。第二Selenium 打开的浏览器偶尔会弹出“Chrome 未正确关闭”的恢复页面影响脚本稳定性。这种问题可以通过给 Chrome 加--disable-session-crashed-bubble和--disable-session-crashed这两个参数规避实测有效。第三程序跑完记得主动关闭浏览器实例driver.quit()不调用的话会有大量 chromedriver 进程残留在后台时间长了内存直接跑满。那种“跑着跑着电脑卡死”的体验基本都是这个原因。对我来说这套 Selenium 爬虫系统最舒服的地方就在于免登录和可视化调试——不用天天追着前端加密参数跑出了问题看几眼浏览器操作记录就能定位。但我也得说实话它并不是万能的采集效率肯定比不上 requests 并发方案风控对抗能力也依赖你对频率的控制。如果你只是临时取点数据或者刚入坑爬虫想找个练手项目这套系统够用了。建议拿到项目后先挑一个小类目、评论数几千条的商品练手跑通了再上大批量任务这样能把踩坑成本降到最低。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。