【问题标题】:Retrieving data from nested href from jsoup从jsoup的嵌套href中检索数据
【发布时间】:2020-03-03 07:36:21
【问题描述】:

我想从 jsoup 的嵌套 href 中检索数据,我的意思是: 我有href: https://www.sherdog.com/news/rankings/2/Sherdogs-Official-Mixed-Martial-Arts-Rankings-164999

我想从这 10 位选手中获取每个数据,例如:

1。 菌种 年龄:37 要么 协会: 强大的风格战斗团队

2。 丹尼尔·科米尔 年龄:40 要么 协会: 美国跆拳道学院

等等。

如何做到这一点?

    String url = "https://www.sherdog.com/news/rankings/2/Sherdogs-Official-Mixed-Martial-Arts-Rankings-164999";
    Document document = Jsoup.connect(url).get();

    Elements allH1 = document.select("h2");
    for (Element href : allH1) {

        Elements allAge = document.select("div.birth_info");
        for (Element  age : allAge) {
            System.out.println(href.select("a[href]").text().toString());
            System.out.println(age.select() // something there?);
        }

【问题讨论】:

    标签: java jsoup href


    【解决方案1】:

    您要查找的数据存在于不同的页面上 - 每个战士都有自己的页面,因此您必须逐页抓取所有页面才能获取数据。
    首先你必须得到每个页面的链接,使用选择器h2 > a[href]

    String url = "https://www.sherdog.com/news/rankings/2/Sherdogs-Official-Mixed-Martial-Arts-Rankings-164999";
    Document document = Jsoup.connect(url).get();
    Elements fighters = document.select("h2 > a[href]");
    for (Element fighter : fighters) {
         System.out.println(fighter.text() + " " + fighter.attr("href"));
    }
    

    之后,您可以加载每个页面并提取数据:

    String fighterUrl = "https://www.sherdog.com" + fighter.attr("href"); 
    Document doc = Jsoup.connect(fighterUrl).get();
    Element fighterData = doc.select("div.data").first();
    System.out.println(fighterData.text());
    

    结合在一起,你得到:

    String url = "https://www.sherdog.com/news/rankings/2/Sherdogs-Official-Mixed-Martial-Arts-Rankings-164999";
    Document document = Jsoup.connect(url).get();
    Elements fighters = document.select("h2 > a[href]");
    for (Element fighter : fighters) {
        System.out.println(fighter.text());
        String fighterUrl = "https://www.sherdog.com" + fighter.attr("href"); 
        Document doc = Jsoup.connect(fighterUrl).get();
        Element fighterData = doc.select("div.data").first();
        System.out.println(fighterData.text());
        System.out.println("---------------");
    }
    

    而(部分)输出是:

    Stipe Miocic 出生: 1982-08-19 年龄: 37 独立, 俄亥俄州 美国 身高 6'4" 193.04 cm 体重 245 lbs 111.13 kg 协会: Strong Style Fight Team Class: Heavyweight Wins 19 15 KO/TKO (79%) 0 SUBMISSIONS (0 %) 4 个决定 (21%) 损失 3 2 KO/TKO (67%) 0 个提交 (0%) 1 个决定 (33%)

    丹尼尔·科米尔 出生:1979-03-20 年龄:40 岁,加利福尼亚州圣何塞 美国 身高 5'11" 180.34 厘米 体重 251 磅 113.85 公斤 协会:美国跆拳道学院 班级:重量级冠军 22 10 KO/TKO (45%) 5 次提交 (23 %) 7 决定 (32%) 损失 2 1 KO/TKO (50%) 0 提交 (0%) 1 决定 (50%) N/C 1

    如果您想获取年龄、关联等单独的字段,则必须使用正则表达式提取它们。

    【讨论】:

    • 感谢您的帮助!我也想报废跨度,所以我必须阅读一些关于线程的内容 - 谢谢!
    猜你喜欢
    • 2022-01-18
    • 2018-12-15
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多