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

如何使用Jsoup从指定网站抓取特定国家的表格数据

只抓取特定国家新冠数据的解决方案

嘿,我来帮你搞定这个问题!你当前的代码会遍历表格里的所有行并输出所有数据,要只获取法国(或者其他特定国家)的数据,只需要在遍历行的时候添加一个国家名称的筛选判断就可以了。

修改后的完整代码

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;

public class CovidScraper {
    public static void main(String[] args) {
        String url = "https://www.worldometers.info/coronavirus/";
        // 定义要抓取的目标国家,这里以法国为例
        String targetCountry = "France";
        
        try{
            Document doc = Jsoup.connect(url).get();
            Element table = doc.getElementById("main_table_countries_today");
            Elements rows = table.getElementsByTag("tr");
            
            for(Element row : rows){
                Elements tds = row.getElementsByTag("td");
                // 跳过没有数据的行(比如表头或空行)
                if(tds.size() == 0) continue;
                
                // 获取第一列的国家名称,trim()去掉前后可能的空格
                String countryName = tds.get(0).text().trim();
                
                // 判断是否是目标国家,equalsIgnoreCase可以忽略大小写(比如避免"france"匹配不到)
                if(countryName.equalsIgnoreCase(targetCountry)){
                    System.out.println("=== " + targetCountry + " 新冠疫情数据 ===");
                    // 遍历输出该行的所有数据
                    for(int i = 0; i < tds.size(); i++){
                        System.out.println(tds.get(i).text());
                    }
                    // 找到目标国家后直接跳出循环,不用继续遍历其他行
                    break;
                }
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

关键修改点说明

  • 添加目标国家变量:定义targetCountry来存储你要抓取的国家名称,后续要换其他国家直接改这个值就行。
  • 筛选国家名称:每行的第一列(tds.get(0))就是国家名称,用trim()处理掉前后可能的空格,避免因空格导致匹配失败;用equalsIgnoreCase()可以忽略大小写,容错性更强。
  • 提前终止循环:找到目标国家的数据后用break跳出循环,不用再遍历剩余行,提升效率。
  • 跳过无效行:判断tds.size() == 0时跳过,避免处理表头或空行导致的索引越界问题。

可选优化:更清晰的字段标注

如果你想让输出更易读,可以给每个数据字段加上明确的说明(对应表格里的列名),比如:

if(countryName.equalsIgnoreCase(targetCountry)){
    System.out.println("=== " + targetCountry + " 新冠疫情数据 ===");
    System.out.println("国家/地区: " + tds.get(0).text());
    System.out.println("总确诊数: " + tds.get(1).text());
    System.out.println("新增确诊: " + tds.get(2).text());
    System.out.println("总死亡数: " + tds.get(3).text());
    System.out.println("新增死亡: " + tds.get(4).text());
    System.out.println("总康复数: " + tds.get(5).text());
    System.out.println("现存确诊: " + tds.get(6).text());
    // 可以根据表格的实际列数继续添加其他字段
    break;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:13:10