DataScraping с использованием Jsoup в Java - PullRequest
0 голосов
/ 01 июня 2018

Я разрабатываю Java-программу для очистки данных с определенного сайта.Я использую jSoup в качестве Java-модуля.

http://data.bitcoinity.org/markets/tradespm/10m?c=e&t=a, то есть веб-сайт

, и я пытаюсь удалить приведенные ниже примеры данных на этом веб-сайте.

bitflyer 144 14,17%

coinbase 121 11,89%

Я пробовал таким образом:

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

    try {
    Document doc = Jsoup.connect(
            "http://data.bitcoinity.org/markets/tradespm/10m?c=e&t=a")
            .get();

    for (Element table : doc.select("tbody")){
        for (Element row : table.select("tr")) {
            Elements tds = row.select("td");


            System.out.println(row);
            System.out.println(tds);

        }
    }


} catch (IOException e) {
    e.printStackTrace();
}

любая помощь?очистка данных

1 Ответ

0 голосов
/ 01 июня 2018

Вы можете получить данные в раунде другим способом.Jsoup очень хорош для анализа статического контента, но для динамического контента вам нужно найти другой способ.Если вы внимательно наблюдаете за выполнением вызовов API, то таблица загружается из запроса GET на http://data.bitcoinity.org/chart_data

. Вы можете проанализировать содержимое JSON, чтобы получить данные.Я использую OkHttp3 для извлечения данных.

// Imports required
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.json.JSONArray;
import org.json.JSONObject;

public static void main(String[] args) throws IOException {
    OkHttpClient okHttpClient = new OkHttpClient();
    Request request = new Request.Builder()
            .url("http://data.bitcoinity.org/chart_data")
            .build();
    Response response = okHttpClient.newCall(request).execute();
    JSONObject responseBody = new JSONObject(response.body().string());
    JSONArray aggregated = responseBody.getJSONObject("data_additional")
            .getJSONArray("aggregated");
    for (int i = 0; i < aggregated.length(); ++i) {
        JSONObject rowInfo = aggregated.getJSONObject(i);
        System.out.println(rowInfo.getString("key") + ", " + rowInfo.getDouble("agg") + ", " + rowInfo.getString("share"));
    }
}

Приведенный выше код будет генерировать ответ как

bit-x, 128103.3596, 4.39
bitfinex, 788172.829602228, 27.00
bitflyer, 385999.821606005, 13.22
bitstamp, 345652.20203694, 11.84
coinbase, 320228.256592679, 10.97
gemini, 99966.4119466147, 3.42
hitbtc, 222472.499999999, 7.62
itbit, 161030.4573, 5.52
kraken, 287811.61880974, 9.86
others, 179860.514253696, 6.16
...