Pegando os links duma consulta no google

7 respostas
Luiz-SP

o lance é: faço uma pesquisa no google e quero pegar os link’s do resultado…
tenho duas classes

import html.*;

public class Main {
	
	public static void main(String args[]){
		HtmlHandler hh = new HtmlHandler();
		String [] links = hh.getLinks("http://www.google.com.br/search?hl=pt-BR&q=metalib&btnG=Pesquisa+Google&meta=");
		for (int i = 0; i < links.length; i++){
			System.out.println(links[i]);
		}
	}

}
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.EditorKit;
import javax.swing.text.html.*;

public class HtmlHandler {

	public String[] getLinks(String uriStr) {
		List result = new ArrayList();

		try {
			// Create a reader on the HTML content
			URL url = new URI(uriStr).toURL();
			URLConnection conn = url.openConnection();
			Reader rd = new InputStreamReader(conn.getInputStream());

			// Parse the HTML
			EditorKit kit = new HTMLEditorKit();
			HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
			kit.read(rd, doc, 0);

			// Find all the A elements in the HTML document
			HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A);
			while (it.isValid()) {
				SimpleAttributeSet s = (SimpleAttributeSet) it.getAttributes();

				String link = (String) s.getAttribute(HTML.Attribute.HREF);
				if (link != null) {
					// Add the link to the result list
					result.add(link);
				}
				it.next();
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (URISyntaxException e) {
			e.printStackTrace();
		} catch (BadLocationException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// Return all found links
		return (String[]) result.toArray(new String[result.size()]);
	}

}

retorna a exceção

java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.google.com.br/search?hl=pt-BR&q=metalib&btnG=Pesquisa+Google&meta=
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at html.HtmlHandler.getLinks(HtmlHandler.java:21)
	at Main.main(Main.java:6)

7 Respostas

T

Existe uma classe Java que lhe possibilita fazer consultas no Google sem ter de ficar efetuando “parse” na página.

http://www.google.com/apis/

Basta você se cadastrar. Uma vantagem de usar a tal API é que você está usando o método oficial de conectar-se ao Google para efetuar buscas.

Uma desvantagem é que ela tenta consultar poucas máquinas (e não todas), ou seja, às vezes ela retorna que "não conseguiu se conectar’.

urubatan

da uma olhada aqui :smiley:
http://plentz.org/2006/03/29/code-contest-1/

Luiz-SP

thingol:
Existe uma classe Java que lhe possibilita fazer consultas no Google sem ter de ficar efetuando “parse” na página.

http://www.google.com/apis/

Basta você se cadastrar. Uma vantagem de usar a tal API é que você está usando o método oficial de conectar-se ao Google para efetuar buscas.

Uma desvantagem é que ela tenta consultar poucas máquinas (e não todas), ou seja, às vezes ela retorna que "não conseguiu se conectar’.

thingol, o google foi só um exemplo, tô mesmo querendo é fazer um spider.

Luiz-SP

urubatan:
da uma olhada aqui :smiley:
http://plentz.org/2006/03/29/code-contest-1/

Cara muito bom…post cinco estrelas :wink:

eu adicionei a linha

conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");

acho que nessa linha vc tá setando os parâmetro do browser, num é? Vc pode explicar isso melhor? ou sabe onde eu posso pegar esse tipo de explicação… e ainda tá dando uma CharSetExpection

javax.swing.text.ChangedCharSetException
	at javax.swing.text.html.parser.DocumentParser.handleEmptyTag(Unknown Source)
	at javax.swing.text.html.parser.Parser.startTag(Unknown Source)
	at javax.swing.text.html.parser.Parser.parseTag(Unknown Source)
	at javax.swing.text.html.parser.Parser.parseContent(Unknown Source)
	at javax.swing.text.html.parser.Parser.parse(Unknown Source)
	at javax.swing.text.html.parser.DocumentParser.parse(Unknown Source)
	at javax.swing.text.html.parser.ParserDelegator.parse(Unknown Source)
	at javax.swing.text.html.HTMLEditorKit.read(Unknown Source)
	at html.HtmlHandler.getLinks(HtmlHandler.java:27)
	at Main.main(Main.java:7)

Como mudar o charset?

urubatan

o esquema é o seguinte, um documento HTML tem na primeira linha ou dentro do cabeçalho, uma linha informando qual o charset dele …
tu pode procurar por isto antes de criar o reader e ja criar com o charser real …
ou então usar um outro parser que suporte alteração de charser on the fly :smiley:

Luiz-SP

Isso seria o ideal, mas como eu faço isso?

urubatan

faz o seguinte, esquece de fazer isto …
e usa só a expressão regular que eu usei no código daquele link que passei antes …

Criado 5 de setembro de 2006
Ultima resposta 5 de set. de 2006
Respostas 7
Participantes 3