[Resolvido] Importar conteúdo de uma página para Java | Resolvido por davidbuzatto

Boas.

Eu quero fazer um programa que me importe o conteúdo de uma determinada página (em formato texto) para uma caixa de texto ou uma variável dentro de um programa java para eu depois analisar os dados, isso é possível?

Obrigado e desculpem se a resposta é muito simples ainda não sei muito de java.

Uma página Web?

Sim do tipo. Eu defino a Wikipedia no enederço www.wikipedia.org e o programa importa todo o texto dessa página para uma String ou String[] de maneira a poder tratar os dados, copiando algo do género:

WIKIPEDIA
Wikipedia
English
The Free Encyclopedia
3 256 000+ articles
日本語
フリー百科事典
669 000+ 記事
Deutsch
Die freie Enzyklopädie
1 054 000+ Artikel
Español
La enciclopedia libre
588 000+ artículos
Français
L?encyclopédie libre
937 000+ articles
Polski
Wolna encyklopedia
690 000+ haseł
Italiano
L?enciclopedia libera
678 000+ voci
Русский
Свободная энциклопедия
525 000+ статей
Português
A enciclopédia livre
560 000+ artigos
Nederlands
De vrije encyclopedie
598 000+ artikelen
Search ? Suchen ? Rechercher ? Szukaj ? Ricerca ? 検索 ? Zoeken ? Buscar ? Busca ? Поиск ? Sök ? 搜索 ? Søk ? Cerca ? Haku ? Пошук ? Hledání ? Keresés ? Ara ? Căutare ? 찾기 ? Serĉu ? Søg ? بحث ? Cari ? Suk ? Tìm kiếm ? Hľadať ? Претрага ? Paie?ka ? חיפוש
100 000+
العربية ? Català ? Česky ? Dansk ? Deutsch ? English ? Español ? Esperanto ? Français ? 한국어 ? Bahasa Indonesia ? Italiano ? עברית ? Lietuvių ? Magyar ? Nederlands ? 日本語 ? Norsk (bokmål) ? Polski ? Português ? Русский ? Română ? Slovenčina ? Српски / Srpski ? Suomi ? Svenska ? Türkçe ? Українська ? Tiếng Việt ? Volapük ? 中文
10 000+
Afrikaans ? Aragonés ? Asturianu ? Kreyòl Ayisyen ? Azərbaycan / آذربايجان ديلی ? বাংলা ? Беларуская (Акадэмічная ·Тарашкевiца) ? বিষ্ণুপ্রিযা় মণিপুরী ? Bosanski ? Brezhoneg ? Български ? Чăваш ? Cymraeg ? Eesti ? Ελληνικά ? Euskara ? فارسی ? Frysk ? Gaeilge ? Galego ? ગુજરાતી ? हिन्दी ? Hrvatski ? Ido ? Íslenska ? Basa Jawa ? ქართული ? Kurdî / كوردی ? Latina ? Latvie?u ? Lëtzebuergesch ? Lumbaart ? Македонски ? മലയാളം ? मराठी ? Bahasa Melayu ? नेपाल भाषा ? Norsk (nynorsk) ? Nnapulitano ? Occitan ? Piemontèis ? Plattdüütsch ? Ripoarisch ? Runa Simi ? Shqip ? Sicilianu ? Simple English ? Sinugboanon ? Sloven?čina ? Srpskohrvatski / Српскохрватски ? Basa Sunda ? Kiswahili ? Tagalog ? தமிழ் ? తెలుగు ? ไทย ? اردو ? Walon ? Winaray ? 粵語 ? ?emaitė?ka
1 000+
Bahsa Acèh ? Alemannisch ? አማርኛ ? Armãneashce ? Arpitan ? ܐܬܘܪܝܐ ? Avañe?ẽ ? Bân-lâm-gú ? Basa Banyumasan ? भोजपुरी ? Bikol Central ? Boarisch ? བོད་ཡིག ? Chavacano de Zamboanga ? Corsu ? Deitsch ? ދިވެހި ? Diné Bizaad ? Eald Englisc ? Эрзянь ? Estremeñu ? Fiji Hindi ? Føroyskt ? Furlan ? Gaelg ? Gàidhlig ? 贛語 ? گیلکی ? 文言 ? Hak-kâ-fa / 客家話 ? ʻŌlelo Hawaiʻi ? Հայերեն ? Hornjoserbsce ? Ilokano ? Interlingua ? Interlingue ? Ирон Æвзаг ? ಕನ್ನಡ ? Kapampangan ? Kaszëbsczi ? Kernewek ? ភាសាខ្មែរ ? Коми ? Кыргызча ? Ladino / לאדינו ? Ligure ? Limburgs ? Lingála ? lojban ? Malagasy ? Malti ? Māori ? مصرى ? مازِرونی / Mäzeruni ? Монгол ? ဗမာစာ ? Nāhuatlahtōlli ? Nedersaksisch ? नेपाली ? Nouormand ? Novial ? Олык Марий ? O?zbek ? पाऴि ? Pangasinán ? ਪੰਜਾਬੀ / پنجابی ? پښتو ? Қазақша ? Qırımtatarca ? Rumantsch ? संस्कृतम् ? Sámegiella ? Sardu ? Саха Тыла ? Scots ? Seeltersk ? شاہ مکھی پنجابی ? සිංහල ? Ślůnski ? کوردی ? Tarandíne ? Татарча / Tatarça ? Тоҷикӣ ? Lea faka-Tonga ? Türkmen ? Uyghur / ئۇيغۇرچه ? Vèneto ? Võro ? West-Vlams ? Wolof ? 吴语 ? ייִדיש ? Yorùbá ? Zazaki
100+
Akan ? Аҧсуа ? Авар ? Aymara ? Bamanankan ? Башҡорт ? Bislama ? Chamoru ? Cuengh ? Dolnoserbski ? Emigliàn-Rumagnòl ? Eʋegbe ? Gĩkũyũ ? 𐌲𐌿𐍄𐌹𐍃𐌺 ? Хальмг ? Hausa / هَوُسَا ? Igbo ? ᐃᓄᒃᑎᑐᑦ / Inuktitut ? Iñupiak ? Kalaallisut ? कश्मीरी / كشميري ? Kongo ? ພາສາລາວ ? Mìng-dĕ̤ng-ngṳ̄ ? Mirandés ? Мокшень ? Молдовеняскэ ? Na vosa vaka-Viti ? Dorerin Naoero ? Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ ? Norfuk / Pitkern ? Нохчийн ? ଓଡି଼ଆ ? Afaan Oromoo ? অসমীযা় ? Papiamentu ? Picard ? Ποντιακά ? Къарачай?Малкъар ? Qaraqalpaqsha ? རྫོང་ཁ ? Romani / रोमानी ? Gagana Sāmoa ? Sängö ? Setswana ? سنڌي ? Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ ? Af Soomaali ? SiSwati ? Sranantongo ? Reo Tahiti ? Taqbaylit ? Tetun ? ትግርኛ ? Tok Pisin ? ᏣᎳᎩ ? ᨅᨔ ᨕᨙᨁᨗ ? Xitsonga ? Удмурт ? Tshivenḓa ? isiXhosa ? Zeêuws ? isiZulu
Other languages ? Weitere Sprachen ? Autres langues ? Kompletna lista języków ? 他の言語 ? Otros idiomas ? 其他语言 ? Другие языки ? Aliaj lingvoj ? 다른 언어 ? Ngôn ngữ khác
Wiktionary Wiktionary
Wikinews Wikinews
Wikiquote Wikiquote
Wikibooks Wikibooks
Wikispecies Wikispecies
Wikisource Wikisource
Wikiversity Wikiversity
Wikimedia Commons Commons
Meta-Wiki Meta-Wiki
Wikimedia

Só o texto, sem imagens.

Já posto um exemplo, estou preparando…
O caminho é usar a classe URLConnection.

Está tudo comentado. Dê uma olhada.

[code]import java.io.;
import java.net.
;

public class WebUtils {

public static void main( String[] args ) {
    
    //chama o método getURLData
    System.out.println( getURLData( "http://lia.dc.ufscar.br/david" ) );
    
}

// método estático para a obtenção dos dados de uma determinada url
public static String getURLData( String url ) {
    
    // cria um StringBuilder para armazenar a saída
    StringBuilder saida = new StringBuilder();
    
    try {
        
        // cria uma url com o endereço passado
        URL u = new URL( url );
        
        // abre a conexão com a url criada
        URLConnection uCon = u.openConnection();
        
        // obtém o input stream da conexão
        InputStream in = uCon.getInputStream();
        
        // um buffer para a leitura dos dados obtidos no input stream
        byte[] buffer = new byte[2048];
        
        
        // tenta colocar dados dentro do buffer. enquanto existirem dados 
        //(resultado da leitura diferentede -1), a execução continua
        while ( in.read( buffer ) != -1 ) {
            
            // faz o append dos dados lidos na saida (StringBuilder)
            saida.append( new String( buffer ) );
            
        }
        
        // fecha o input stream
        in.close();            
    
        // tratamento de excessões...   
    } catch ( MalformedURLException exc )  {
        
        saida.append( "ERRO: URL mal formada." );
        exc.printStackTrace();
        
    } catch ( IOException exc ) {
        
        saida.append( "IOException" );
        exc.printStackTrace();
        
    } catch ( SecurityException exc ) {
        
        saida.append( "ERRO: Não há permissão para conexão." );
        exc.printStackTrace();
        
    } catch ( IllegalArgumentException exc ) {
        
        saida.append( "ERRO: O proxy é null ou de tipo incorreto." );
        exc.printStackTrace();
        
    } catch ( UnsupportedOperationException exc ) {
        
        saida.append( "ERRO: A subclasse que implementa o protocolo não suporta este método." );
        exc.printStackTrace();
        
    }
    
    // retorna o que existe na saída na forma de uma String
    return saida.toString();
    
}

}[/code]

Agora o tratamento são outros quinhentos…

1 curtida

Então, como vc quer só o texto fica um pouco mais complicado.
Você teria que analisar os dados retornados.

[quote=davidbuzatto]Então, como vc quer só o texto fica um pouco mais complicado.
Você teria que analisar os dados retornados.[/quote]

Estive a tentar testar criei no NetBeans um projecto vazio, colei o código e deu os seguintes erros:

run:
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:525)
at java.net.Socket.connect(Socket.java:475)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
at sun.net.www.http.HttpClient.(HttpClient.java:233)
IOException
at sun.net.www.http.HttpClient.New(HttpClient.java:306)
at sun.net.www.http.HttpClient.New(HttpClient.java:323)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049)
at t.T.getURLData(T.java:30)
at t.T.main(T.java:11)

Qual será a origem destes erros? Eu estou a utilizar neste momento uma internet com proxy, será disso?

Quanto ao tratamento dos dados eu depois faço isso se tiver duvidas coloco mas esta primeira parte era mais importante.

Muito obrigado.

Já testei numa ligação sem proxy e funciona, MUITO OBRIGADO davidbuzatto.

Só que neste momento ele retorna o html da página e não o seu texto final. Para retirar os dados que não sejam formatação html talvez a solução passe por ignorar tudo o que esteja dentro de <> correndo o erro de ignorar dados da página (que pode conter <>).

Haverá alguma fora de carregar só o texto sem formatações html ?

Olá,

Realmente, como eu disse, volta o código e não somente o texto.
Você pode tentar usar algum parser de html para pegar apenas o que precisa.

Um parser que você pode testar é o JTidy. http://jtidy.sourceforge.net/
Na seção getting started, dê uma olhada em JTidy API. Lá tem as primeiras dicas para você poder utilizar.

[]´s

[quote=davidbuzatto]Olá,

Realmente, como eu disse, volta o código e não somente o texto.
Você pode tentar usar algum parser de html para pegar apenas o que precisa.

Um parser que você pode testar é o JTidy. http://jtidy.sourceforge.net/
Na seção getting started, dê uma olhada em JTidy API. Lá tem as primeiras dicas para você poder utilizar.

[]´s[/quote]

Muito obrigado mesmo pela ajuda, foi fundamental. Entretanto hoje já estive a procurar soluções e dei agora mesmo com este site também: http://nalynn.net/articles/2008/01/java_tip_how_get_web_page

Vou já testar o que você (em Portugal normalmente trata-se as pessoas por tu é um bocado estranho escrever você se eu tratar por tu foi esquecimento) me mandou.

Muito obrigado e grande abraço.

Olá,

Quanto ao você/tu, sem problema :wink:
Ví o endereço que você passou e é basicamente o que eu fiz, com outras coisinhas mais.
Teste e veja se funciona :wink:

[]´s

[quote=davidbuzatto]Olá,
Ví o endereço que você passou e é basicamente o que eu fiz, com outras coisinhas mais.
Teste e veja se funciona :wink:

[]´s[/quote]

Já estive a ver e faz a mesma coisa também com o HTML, já estou noutra a arranjar um código conversor de HTML para texto não deve ser difícil já muita gente deve ter precisado disso. Depois vou é ter problemas com o Proxy pois passo muitas horas num local onde só tenho acesso à net por proxy e o método lá em cima não funciona mas depois vejo isso,

Abraço e mais uma vez muito obrigado.

De nada :wink: