【问题标题】:Jsoup, html scrapingJsoup、html抓取
【发布时间】:2014-11-23 19:14:02
【问题描述】:

所以我正在尝试抓取几段 html(见下文)。 html 有一个重复的 div(这里:类数据)。我试图从这个类中获取名称,stat1 和 stat 2。所以我从:getElementsByClass 开始。但是我该如何从这里开始呢?如何分别获取 3 个元素?

这是我目前得到的,但我只是把所有的文字,而不是单独的 3 部分:

html.html

<html>
    <div class='data'>
        <a href='/url1'>
            <div class='name'>name1</div>
            <div class='stat'>123</div>
            <div class='stat2'>456</div>
        </a>
    </div>
    <div class='data'>
        <a href='/url2'>
            <div class='name'>name2</div>
            <div class='stat'>123.1</div>
            <div class='stat2'>456.2</div>
        </a>
    </div>
</html>

JsoupTesting.java

package JsoupTest;

import java.io.File;
import java.io.IOException;

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

public class JsoupTesting {

    public static void main(String[] args) throws IOException {

        File input = new File("html.html"); //path to html.html
        Document doc = Jsoup.parse(input, "UTF-8");

        Elements contents = doc.getElementsByClass("data");

        for (Element content : contents) {
            String text = content.text();
            System.out.println("name: " + text + "\n----");
        }

    }

}

结果:

name: name1 123 456
----
name: name2 123.1 456.2
----

我想要类似的东西:

name: name1 
stat: 123 
stat2: 456
----
name: name2 
stat: 123.1 
stat2: 456.2
----

【问题讨论】:

  • 你不能像以前一样使用getElementsByClass吗?
  • 是的,我每次都可以使用其他 getElementsByClass 抓取页面 3 次,但没有更好的解决方案吗?所以我只需要刮一次页面。
  • 你不需要刮页面3次。在for 循环内,只需使用String name = content.getElementsByClass("name").first().html();String stat = content.getElementsByClass("stat").first().html();String stat2 = content.getElementsByClass("stat2").first().html();
  • 哇,成功了,非常感谢。

标签: java jsoup screen-scraping


【解决方案1】:

感谢 BackSlash 的评论,我得到了它的工作,不是很努力,他只是告诉我该怎么做 :)

package JsoupTest;

import java.io.File;
import java.io.IOException;

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

public class JsoupTesting {

    public static void main(String[] args) throws IOException {

        File input = new File("html.html"); //path to html.html
        Document doc = Jsoup.parse(input, "UTF-8");

        Elements contents = doc.getElementsByClass("data");

        for (Element content : contents) {
            String name = content.getElementsByClass("name").first().html();
            String stat = content.getElementsByClass("stat").first().html();
            String stat2 = content.getElementsByClass("stat2").first().html();
            System.out.println("name: " + name);
            System.out.println("stat: " + stat);
            System.out.println("stat2: " + stat2 + "\n----");
        }

    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多