Запишите Json файл данных, извлеченных со страницы - PullRequest
1 голос
/ 14 марта 2020

Я извлекаю данные из таблицы на странице https://br.investing.com/indices/major-indices

Я могу извлечь данные идеально, но я не знаю, как записать в Json , в формате ниже.

Селен код для извлечения данных:

public void AcessarPagina() {
    System.out.println("*** Abrindo a Pagina de Extração *** \n");
    driver.get("https://br.investing.com/indices/major-indices");
    WebDriverWait AguardarTabela = new WebDriverWait(driver, 20);
    AguardarTabela.until(ExpectedConditions.presenceOfElementLocated(By
                                           .id("cross_rates_container")));
    System.out.println("*** Iniciando a Extração *** \n");
    WebElement TabelaCabecalho = driver.findElement(By.id("cross_rates_container"));
    List<WebElement> Cabecalho = TabelaCabecalho.findElements(By.tagName("th"));
    for (int i = 0; i < Cabecalho.size(); i++) {
        System.out.print(Cabecalho.get(i).getText() + ";");
    }
    WebElement TabelaDados = driver.findElement(By.id("cross_rates_container"));
    List<WebElement> Linhas = TabelaDados.findElements(By.tagName("tr"));
    List<WebElement> ListaColunas = null;
    for (WebElement row : Linhas) {
        System.out.println();
        ListaColunas = row.findElements(By.tagName("td"));
        for (WebElement column : ListaColunas) {
            System.out.print(column.getText() + ";");
        }
    }
}

Json нужный мне формат:

[ {
  "indice" : "Dow 30",
  "ultimo" : "23.185,62",
  "maxima" : "23.189,76",
  "minima" : "21.285,37",
  "variacao" : "+1.985,00",
  "variacao2" : "+9,36%",
  "hora" : "13/03"
}, {
  "indice" : "S&P 500 VIX",
  "ultimo" : "23.185,62",
  "maxima" : "23.189,76",
  "minima" : "21.285,37",
  "variacao" : "+1.985,00",
  "variacao2" : "+9,36%",
  "hora" : "13/03"
} ]

Ответы [ 2 ]

3 голосов
/ 14 марта 2020

Отображение объекта на объект Java, затем использование Джексона, как упоминал Крис, вероятно, лучшая ставка. Я собрал пример того, что вы можете сделать:

Вот объект Java, который может содержать ваши значения:

public class TableElement {
    private String indice;
    private String ultimo;
    private String maxima;
    private String minima;
    private String variacao;
    private String variacao2;
    private String hora;

    public String getIndice() {
        return indice;
    }

    public void setIndice(String indice) {
        this.indice = indice;
    }

    // Add all getters and setters ...
}

Примечание - геттеры и сеттеры необходимы, потому что это то, что Джексон использует для извлечения / установки значений объекта из и в json

И на самом деле отображение его на json будет go примерно таким:

StockTable stockTable = new StockTable();
List<TableElement> stocks = new ArrayList<>();

TableElement tableElement = new TableElement();
tableElement.setIndice("Dow 30");
tableElement.setUltimo("23.185,62");
tableElement.setMaxima("23.189,76");
tableElement.setMinima("21.285,37");
tableElement.setVariacao("+1.985,00");
tableElement.setVariacao2("+9,36%");
tableElement.setHora("13/03");

TableElement tableElement2 = new TableElement();
tableElement2.setIndice("S&P 500 VIX");
tableElement2.setUltimo("23.185,62");
tableElement2.setMaxima("23.189,76");
tableElement2.setMinima("21.285,37");
tableElement2.setVariacao("+1.985,00");
tableElement2.setVariacao2("+9,36%");
tableElement2.setHora("13/03");

stocks.add(tableElement);
stocks.add(tableElement2);

ObjectMapper objectMapper = new ObjectMapper();

try {
    System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
                                       .writeValueAsString(stocks));
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

И это будет произвести вывод, который выглядит следующим образом:

[ {
  "indice" : "Dow 30",
  "ultimo" : "23.185,62",
  "maxima" : "23.189,76",
  "minima" : "21.285,37",
  "variacao" : "+1.985,00",
  "variacao2" : "+9,36%",
  "hora" : "13/03"
}, {
  "indice" : "S&P 500 VIX",
  "ultimo" : "23.185,62",
  "maxima" : "23.189,76",
  "minima" : "21.285,37",
  "variacao" : "+1.985,00",
  "variacao2" : "+9,36%",
  "hora" : "13/03"
} ]
2 голосов
/ 14 марта 2020

Возможно, проще всего определить класс с этими свойствами (indice et c), и, когда вы анализируете строки данных, создаете экземпляры, которые вы добавляете в список, а затем просто используете Gson или Jackson для преобразования списка объектов в JSON например Как создать JSONArray для списка

...