Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Como salvar o HTML de uma página no banco de dados

Olá pessoal,

Estou tentando fazer um código em java aonde eu acesso um endereço url capturo o html da página e envio para o banco de dados.

Até o momento eu consegui acessar a url e imprimir o html no console, mas não estou conseguindo salvar no banco de dados.

Abaixo o código.

Classe App.java

package br.com.partnergroup.robo.test.app;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.swing.JOptionPane;

import br.com.partnergroup.robo.test.bd.H2Server;

public class App {

    public void getPage(URL urlSite) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(urlSite.openStream()));

        String inputLine;

        while ((inputLine = in.readLine()) != null) {

            // Imprime página no console
            System.out.println(inputLine);

        }

        in.close();
    }

    public static void main(String[] args) throws SQLException, Exception {

        URL urlSite = null;

        urlSite = new URL("https://www.msn.com/pt-br/?ocid=mailsignout");
        new App().getPage(urlSite);

        String url = "jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1";

        String sql = "insert into tb_html (html) values (?)";

        try (Connection con = DriverManager.getConnection(url, "sa", "")) {

            PreparedStatement stmt = con.prepareStatement(sql);

            stmt.setString(1, urlSite.getFile());
            stmt.execute();

            try (H2Server server = new H2Server()) {

                server.start();

            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }

            JOptionPane.showMessageDialog(null, "Clique em ok para finalizar");

        }
    }
}

Classe H2Server.java

package br.com.partnergroup.robo.test.bd;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import org.h2.tools.Server;

public class H2Server extends Thread implements AutoCloseable {

    private Server server;

    public H2Server() throws SQLException {
        super();

    }

    @Override
    public void run() {
        super.run();
        try {
            server=Server.createWebServer("-webDaemon","-webPort","9099");
            server.start();
            criarTabelas();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void criarTabelas() throws SQLException {
        String url="jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1";
        try(Connection con = DriverManager.getConnection(url,"sa","")){
            try(PreparedStatement ps = con.prepareStatement("CREATE TABLE  if not exists tb_html(id INT PRIMARY KEY auto_increment, html varchar);")){
                ps.execute();
            }        
        }

    }


    public void close() throws Exception {
        server.stop();
        interrupt();
    }




}
5 respostas

O que está tendo de errado ?

Bom dia!

Não apresenta erro nenhum.

eu fiz uma pequena mudança na classe App.java e agora estou utilizando o jsoup para capturar o body da url. Preciso agora somente salvar no banco de dados.

public class App {

public static void main(String[] args) throws SQLException, Exception {

    String url = "http://www.solhorticenter.com.br/ofertas/";

    try (H2Server server = new H2Server()) {

        Document doc = Jsoup.connect(url).get();

        Elements elementosTag = doc.select("body");

        System.out.println("Elementos com a tag <body>:");

        for (Element el : elementosTag)
            System.out.println(el.text());

        server.start();

        JOptionPane.showMessageDialog(null, "Clique em ok para finalizar");

    }
}

}

Bom dia!

Avancei mais um pouco com o código e agora eu consigo me conectar ao banco de dados mas quando eu olho no banco ele está guardando o link do site e não os elementos body ( os elementos que estão dentro do body ele imprimi no console ).

Segue o código.

public class App {

public static void main(String[] args) throws SQLException, Exception {

    String link = "http://www.solhorticenter.com.br/ofertas/";

    String url="jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1";

    try (H2Server server = new H2Server()) {

        server.start();

        Document doc = Jsoup.connect(link).get();

        Elements elementosTag = doc.select("body");

        System.out.println("Elementos com a tag <body>:");

        for (Element el : elementosTag)
            System.out.println(el.text());

        try(Connection con = DriverManager.getConnection(url,"sa","")){
            try(PreparedStatement ps = con.prepareStatement("INSERT INTO tb_html(html) VALUES(?)")){
                ps.setString(1, link);
                ps.execute();
            }        
        }

        JOptionPane.showMessageDialog(null, "Clique em ok para finalizar");

    }
}

}

Olá Thiago!

Achei um artigo que pode te ajudar:

https://ksah.in/introduction-to-web-scraping-with-java/

Bons estudos! ^^

solução!

Olá Pessoal,

Consegui resolver e salvar o conteúdo do html no banco de dados.