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

Java中使用Jsoup抓取ilan.gov.tr网页数据遇选择器问题求助

解决Jsoup抓取动态渲染页面数据的问题

问题核心分析

你当前代码存在两个关键问题:

  1. 页面是Angular动态渲染的:Jsoup直接调用connect().get()只能获取初始静态HTML,无法拿到浏览器渲染后加载的动态表格数据。
  2. CSS选择器语法错误:你写的选择器不符合规范,比如search-results-content row ng-tns-c146-3是把多个类名/标签名直接拼接,正确多类选择器需用.分隔;另外ng-tns-c146-3、ng-star-inserted这类是Angular动态生成的属性,会随页面更新变化,不能作为稳定定位依据。

可行解决方案

方案1:模拟浏览器渲染(推荐)

借助Selenium工具模拟浏览器加载页面,获取渲染后的完整源码再用Jsoup解析,示例代码如下:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class IlanGovScraper {
    public static void main(String[] args) {
        // 配置ChromeDriver路径,替换为你本地的实际路径
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        
        // 启用无头模式,不弹出浏览器窗口
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless=new");
        
        WebDriver driver = new ChromeDriver(options);
        try {
            driver.get("https://www.ilan.gov.tr/ilan/kategori/9/ihale-duyurulari");
            // 等待页面加载完成,可根据网络情况调整等待时长
            Thread.sleep(3000);
            
            // 获取渲染后的页面源码
            String pageSource = driver.getPageSource();
            Document doc = Jsoup.parse(pageSource);
            
            // 使用稳定的语义化类名定位数据行
            for (Element row : doc.select(".search-results-content .list-item")) {
                // 提取标题
                String title = row.select(".list-desc").text();
                // 提取右侧信息列
                String info = row.select(".col.col-4.col-lg-4").text();
                
                System.out.println("标题:" + title);
                System.out.println("附加信息:" + info);
                System.out.println("---");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            driver.quit();
        }
    }
}

方案2:直接调用数据API

打开浏览器开发者工具(F12)切换到Network标签,刷新页面后查找加载招标数据的XHR请求,直接调用该API获取JSON格式数据,这种方式比模拟渲染更高效。

选择器使用注意事项

  • 避免使用Angular动态生成的类名(如ng-tns-*、ng-star-inserted),这类类名不稳定,会随页面版本变动。
  • 优先使用静态、语义化的类名或标签结构定位元素,比如.list-desc、.list-item这类具有明确含义的类。
  • 多类选择器必须用.分隔,比如.col.col-4.col-lg-4,而非.col col-4 col-lg-4。

内容的提问来源于stack exchange,提问作者Furkan Uğurlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:41:13