You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jsoup爬取Kakuro棋盘异常:不同URL返回相同文档及尺寸适配问题

问题分析与解决方案

针对你遇到的两个核心问题(小尺寸棋盘爬取失败、爬取内容重复),可以从以下几个方向排查和解决:

一、小尺寸(3x3/4x4)爬取失败的原因与处理

  1. 验证URL正确性
    先手动在浏览器中打开你构造的3x3/4x4尺寸对应的URL,确认页面是否能正常加载:

    • 如果手动访问也失败,说明你构造的URL不符合网站规则,需要重新核对小尺寸棋盘的URL参数(比如参数名是size还是dim,取值格式是3x3还是3-3等)。
    • 如果手动能正常打开,继续排查请求配置问题。
  2. 补充请求头信息
    很多网站会校验请求的User-Agent、Accept等头信息,Jsoup默认请求头可能被识别为爬虫,导致小尺寸请求被拦截(大尺寸可能未触发该限制)。修改请求代码,添加完整请求头:

    try {
        Document document = Jsoup.connect(url)
            .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
            .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
            .header("Referer", "https://目标网站的主页URL")
            .timeout(10000) // 适当延长超时时间
            .get();
        // 后续处理逻辑
    } catch (IOException e) {
        // 打印具体异常信息,定位问题
        e.printStackTrace();
    }
    
  3. 捕获并分析异常
    不要忽略Jsoup.connect().get()抛出的IOException,打印异常栈信息,根据异常类型针对性解决:

    • 403:大概率是反爬拦截,需要添加更多请求头或使用代理。
    • 404:URL构造错误,重新核对。
    • 解析错误:网站返回内容非标准HTML,可先获取响应文本再处理。

二、爬取内容重复的原因与处理

  1. 启用Cookie会话管理
    目标网站可能通过Cookie维持会话,新棋盘生成依赖同一会话。Jsoup默认每次请求都是独立会话,因此每次返回初始棋盘。可以通过保存和复用Cookie解决:

    // 第一次请求获取会话Cookie
    Response initialResponse = Jsoup.connect(url)
        .userAgent(...)
        .execute();
    Map<String, String> cookies = initialResponse.cookies();
    
    // 后续请求新棋盘时复用Cookie
    Document newDocument = Jsoup.connect(newBoardUrl)
        .userAgent(...)
        .cookies(cookies)
        .get();
    
  2. 检查是否为动态生成内容
    如果网站新棋盘是通过前端JavaScript动态生成的,Jsoup无法执行JS,只能获取页面加载时的静态内容。这种情况下:

    • 打开浏览器开发者工具(F12),切换到Network面板,点击网站的"生成新棋盘"按钮,观察是否有AJAX请求获取新棋盘数据。
    • 如果有,直接请求该AJAX接口(通常是JSON格式),比爬取HTML更高效。
  3. 添加防缓存参数
    部分网站会对重复URL返回缓存内容,在请求URL后添加随机参数(如时间戳)避免缓存:

    String uniqueUrl = url + "?timestamp=" + System.currentTimeMillis();
    Document document = Jsoup.connect(uniqueUrl)
        .userAgent(...)
        .get();
    

总结

目前的问题更倾向于目标网站的会话/反爬机制,加上小尺寸棋盘的URL可能存在构造误差。优先通过手动验证URL、补充请求头、复用Cookie这几个步骤排查,应该能解决大部分问题。

内容的提问来源于stack exchange,提问作者Clipz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:05:25