如何使用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
相关产品推荐
相关产品推荐

