Google-Results mit RegEx

apric

Erfahrenes Mitglied
Mir stellt sich folgendes Problem:

Nach unzähligen Stunden blättern in den Sun-Dokus komme ich einfach auf keinen grünen Zweig:

Ich habe eine Google-Suchergebnis-Seite als Quelltext vorliegen und will darin die Ergebnisse am besten als Array haben (ein Array für die Beschreibung der Links und ein Array mit den URLs):

In PHP ist das ganze ziemlich logisch und schnell gelöst:
PHP:
preg_match('=^(.*)<p><a\shref\=(\S*)>(.*)$=msiU',$google_result_source,$dSearch);
$dSearch=$dSearch[2];

Somit ist $dSearch die URL des ersten Treffers usw.

Ich bräuchte das ganze nun in Java, doch mit den tausenden matcher- und pattern-klassen komme ich nicht wirklich klar.

Wäre nett, wenn mir einer von Euch helfen könnte.


Ach ja, mit der offiziellen GoogleAPI möchte ich nicht arbeiten, kann doch nicht so schwer sein, in Java einen kleinen RegEx zu implementieren...
 
Hallo!

Siehe:

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;

import javax.swing.text.BadLocationException;
import javax.swing.text.EditorKit;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

/*
 * Created on 04.04.2004
 *
 */

/**
 * @author Administrator
 *
 */
public class GoogleSearch {

	public static void main(String[] args) {
		new GoogleSearch().doSearch();
	}

	/**
	 * 
	 */
	private void doSearch() {
		// TODO Auto-generated method stub
		URL url = null;
		String lookFor = "Tutorials.de";
		ArrayList list = new ArrayList();

		try {
			url = new URL("http://www.google.de/search?q=" + lookFor);

			HttpURLConnection conn = (HttpURLConnection) url.openConnection();

			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setRequestProperty(
				"user-agent",
				"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)");
			conn.setRequestProperty("Referer", "http://www.google.de/");
			conn.connect();
			BufferedReader br =
				new BufferedReader(
					new InputStreamReader(conn.getInputStream()));

			EditorKit kit = new HTMLEditorKit();
			HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
			doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);

			kit.read(br, doc, 0);

			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) {
					if (!link.startsWith("/"))
						list.add(link);
				}
				it.next();
			}

			br.close();

			int size = list.size();

			for (int i = 0; i < size; i++) {
				System.out.println(list.get(i));
			}

		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (BadLocationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

Sollten im lookFor Leerzeichen enthalten sein, so sind diese durch die Zeichenfolge %20 zu ersetzen...

Gruß Tom
 
Zuletzt bearbeitet:
Das ist natürlich auch eine Möglichkeit, aber wieso will niemand direkt mit regulären Ausdrücken arbeiten?
Damit ist (eigentlich) so vieles so schon einfach zu bewerkstelligen... (inkl. Google-Results fetchen).
 
Zurück