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

Java Jsoup爬取in-the-sky网页指定文本失败如何排查解决

Jsoup爬取目标内容失败排查

代码无法正常获取内容由3个核心问题导致:

  • CSS选择器语法错误:div.col-md-6 col-md-pull-6中的空格代表后代选择器,语义为查找div.col-md-6节点下名为col-md-pull-6的子标签,这类标签不存在。匹配同时带有多个class的节点时,多个类选择器需要直接连写,不能加空格,正确写法为div.col-md-6.col-md-pull-6。
  • 选择器匹配范围过泛:页面中存在多个带col-md-6类名的div节点,直接按类匹配容易选中非目标区块,建议先定位到id唯一的主内容父容器再向下查找,避免匹配到空节点。
  • 请求头缺失:该站点会拦截无合法User-Agent的请求,Jsoup默认携带的Java客户端UA会被反爬规则识别,返回的文档结构和浏览器端看到的结构不一致,导致选择器匹配失效。

修正后可运行代码

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class Main {
    public static void main(String args[]) {
        int num = 216;
        int day = 17;
        int month = 6;
        int year = 2022;
        String url ="https://in-the-sky.org/data/object.php?id=A"+num+"&day="+day+"&month="+month+"&year="+year;
        System.out.println(url);
        Document doc = null;
        try {
            // 模拟浏览器UA,绕过基础反爬拦截
            doc = Jsoup.connect(url)
                    .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
                    .get();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("=======================================================");
        // 先定位唯一主内容区,再匹配目标多类div,多类选择器不加空格
        Element targetDiv = doc.selectFirst("div#mainContent div.col-md-6.col-md-pull-6");
        if (targetDiv != null) {
            String output = targetDiv.select("p").text();
            System.out.println(output);
        } else {
            System.out.println("未匹配到目标节点,可打印doc.html()检查实际返回的页面结构");
        }
        System.out.println("=======================================================");
    }
}

若运行后仍无法获取内容,优先打印返回的完整HTML源码,确认目标节点是否存在,部分动态渲染内容无法被静态爬取直接获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:45:29