# Daten von Internetseite auslesen



## Peter201592 (1. Jul 2016)

Hey,
zu dem Thema habe ich zwar schon ein paar Themen gefunden, aber leider hat mir bisher noch keins wirklich weitergeholfen.

Ich möchte bestimmte Daten von einer Internetseite auslesen, als Beispiel habe ich jetzt einfach mal dasoertliche.de genommen, da die Seite recht einfach aufgebaut ist.
Ich habe jetzt einfach mal nach dem Namen "Müller" in "Wiesbaden" gesucht, dann bekomme ich eine Liste wie auf Bild1 und wenn ich dann auf den ersten Namen klicke, dann komme ich zu Bild2.

Nehmen wir mal an ich möchte den Namen und die Telefonnummer haben.
Die Quelltexte sind immer gleich aufgebaut, die Telefonnummer steht zB in Zeile 865.

Wie bekomme ich jetzt hin, dass ich alles Müllers in Wiesbaden mit der Telefonnummer in der Konsole ausgegeben.
Kann mir vielleicht jemand helfen?   bekomme?


----------



## KaffeeFan (1. Jul 2016)

Mit Selenium könntest du sowas realisieren.
Damit könntest du auch Felder ansprechen, füllen, auslesen, Buttons drücken...
Allerdings musst du vorher im Quellcode die entsprechenden Felder raussuchen, damit du sie in Java ansprechen kannst.

Gruß
Luk


----------



## Peter201592 (1. Jul 2016)

ich habe jetzt mal etwas mit selenium rumgespielt, aber verstehe nicht wie mir das weiter helfen soll.
die tutorials die ich gefunden habe helfen mir irgendwie nicht weiter, kannst du mir vielleicht etwas genauer erklären wie ich das machen muss?


----------



## Cromewell (2. Jul 2016)

Hier gibt's auch noch ein paar Tipps: http://stackoverflow.com/questions/6159118/using-java-to-pull-data-from-a-webpage


----------



## Peter201592 (2. Jul 2016)

ok danke, mit dem Code lässt sich zumindest mal der Quellcode von dasoertliche.de in der Konsole ausgeben, aber der Code funktioniert nicht bei allen Internetseiten, wenn ich zB http://www.gewerbeverzeichnis-deutschland.de/ mit dem Code abfrage bekomme ich die Fehlermeldung (siehe Bild)
Woran liegt das?


----------



## Xyz1 (2. Jul 2016)

Java web browser automation - hatten wir hier schon mal. Das ist möglich, aber alles sehr umständlich. Man muss viel Energie und Zeit rein stecken für so etwas, bis man eine Komplettlösung hat. Ich bin jedenfalls nicht bereit dafür.

Desweiteren ist es immer gut, bevor man mit so etwas anfängt, was sogar ILLEGAL ist, nicht zu schauen, ob die Website nicht eine öffentliche API für so etwas anbietet - so eine bietet nämlich verschiedene Vorteile.

Wiedemauchsei, ich wünsche dir viel Erfolg bei der deinem Vorhaben oder der Suche danach, jemand zu finden der das für dich übernimmt...


----------



## TheFrog (2. Jul 2016)

@Peter201592 Ich hab vor einiger Zeit mal etwas ähnliches programmiert. 

http://www.java-forum.org/thema/beurteilung-programmcode.171846/#post-1081664

Der Code zieht sich den Inhalt einer Website und dann wird mit einem regulären Ausdruck über den Inhalt gegangen und nach einem Muster (z.B. bestimmtes html tag) gesucht. Zum Schluss wird der Inhalt des Tags auf der Konsole ausgegeben 

Viele Grüße


----------



## TheFrog (2. Jul 2016)

Deine Sucheingabe wird mittels HTTP GET übergeben, d.h. Übergabe der Daten in der URL. Wenn du die Url unter die Lupe nimmst, findest du das hier:

&ci=Wiesbaden&kw=M%FCller

Du kannst nun zwei Variablen deklarieren (city, keyword beide vom Typ String) und dann die obere Zeile ändern in: "(..)&ci=" + city + "&kw=" + keyword

Dann brauchst du natürlich noch einen regulären Ausdruck der für deine Seite passt..


----------



## mrBrown (2. Jul 2016)

DerWissende hat gesagt.:


> was sogar ILLEGAL ist


Das wird auch mit öfter erwähnen nicht wahrer...

Seitenquelltext ziehen, passenden Regex drüber und du hast die Nummern


----------



## KaffeeFan (4. Jul 2016)

```
package deinprojekt;

import org.openqa.selenium.*;
import org.openqa.selenium.opera.*;
import org.openqa.selenium.remote.*;

public class NewClass
{

  public WebDriver driver;

  public void initialisieren()
  {
    //    System.setProperty("phantomjs.binary.path", System.getProperty("user.dir") + "/phantomjs");
    System.setProperty("phantomjs.binary.path", System.getProperty("user.dir") + "/phantomjs");

    DesiredCapabilities DesireCaps = new DesiredCapabilities();;
//    DesireCaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "C:\\Users\\Admin\\Documents\\NetBeansProjects\\deinprojekt\\phantomjs\\bin\\phantomjs.exe");
    DesireCaps.setCapability(OperaDriverService.OPERA_DRIVER_EXE_PROPERTY, "C:\\Users\\Admin\\Documents\\NetBeansProjects\\deinprojekt\\operadriver.exe");
    driver = new OperaDriver(DesireCaps);
  }

  public void suchen()
  {
    driver.get("http://www.dasoertliche.de");

    WebElement name = driver.findElement(By.name("kw")); // Name-Feld
    name.sendKeys("Müller");

    WebElement plz = driver.findElement(By.name("ci")); // PLZ-Feld
    plz.sendKeys("12345");

    plz.submit(); // Enter

    WebElement first = driver.findElement(By.className("hitlnk_mail")); // E-Mail-Adresse des ersten Eintrags
    System.out.println(first.getText());
  }

  public static void main(String[] args)
  {
    NewClass newClass = new NewClass();
    newClass.initialisieren();
    newClass.suchen();
  }
}
```

Wenn du anstatt des Opera-Drivers den PhantomJS-Driver nimmst(den ich ausgeklammert habe), dann läuft alles im Hintergrund ab. Musst natürlich vorher die Driver laden.
Wie performant das ganze ist, kann ich dir leider nicht sagen.

Gruß
Luk


----------



## Peter201592 (6. Jul 2016)

ich möchte mich schon einmal für die ganze Hilfe bedanke, ich habe leider erst wieder Ende der Woche Zeit um mich weiter zu beschäftigen.
Ich werde mich dann wieder melden


----------

