# Html Seite auslesen



## member42 (16. Sep 2018)

Hallo,
ich möchte den Quelltext einer Html Seite auslesen.
Einmal mache ich es mit Jsoup und einmal mit einer URLConnection, nur werden jeweils ganz andere Sachen ausgegeben.

Mit UrlConnection:

```
try {
               
        URLConnection con = new URL("https://www.youtube.com/feed/trending").openConnection();
        InputStream is = con.getInputStream();
        int daten = 0;
       
        StringBuffer sb = new StringBuffer();
       
        while ((daten = is.read()) != -1) {
            sb.append((char)daten);
        }
       
        String s = sb.toString();
       
        System.out.println(s);
       
        System.out.println(s.contains("!doctype")); // Hier wird false ausgeben
      } catch(Exception ex) {     
        }
```
   Mit Jsoup:

```
try {
            Document  doc = Jsoup.connect("https://www.youtube.com/feed/trending").get(); 
        String s = doc.toString();
            System.out.println(s);
            System.out.println(s.contains("!doctype")); // Hier wird true ausgegeben
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
```
Woran liegt dass, das jeweils komplett andere Sachen ausgegeben werden?

Danke im Vorraus.


----------



## mihe7 (16. Sep 2018)

Im ersten Fall gibst Du aus, was der Server im Response-Body zurückschickt (also tatsächlich den Quelltext), im zweiten Fall lässt Du Jsoup erst einmal den Quelltext parsen und erhältst ein DOM zurück, das Du dann als String ausgeben lässt.


----------



## Xyz1 (16. Sep 2018)

Meines Wissens nach, meldet sich Jsoup auch mit Jsoup und Connection halt nicht.


----------



## member42 (16. Sep 2018)

OK,danke. Wenn ich aber im Browser den Quelltext ansehe habe ich ja ganz oben doctype... .Wenn ich aber in dem String vom oberen nach doctype suche , wird nichts gefunden. Dann kann es doch nicht der Quelltext sein?


----------



## Xyz1 (16. Sep 2018)

Jep, Jsoup meldet sich mit Chrome Safari:

https://jsoup.org/apidocs/constant-values.html#org.jsoup.helper.HttpConnection.DEFAULT_UA


----------



## Xyz1 (16. Sep 2018)

@member42 Ah meine Antworten werden nicht gelesen stimmts? 

Kommentiere Zeile 2 mal ein (und staune) :

```
URLConnection con = new URL("https://www.youtube.com/feed/trending").openConnection();
    //con.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36");
    StringBuffer buff = new StringBuffer();
    try (
            InputStream is = con.getInputStream()) {
        int daten = 0;
        while ((daten = is.read()) != -1) {
            buff.append((char) daten);
        }
    }
    System.out.println(buff.substring(0, 200));

    System.out.println(Jsoup.connect("https://www.youtube.com/feed/trending").get().outputSettings(new Document.OutputSettings().prettyPrint(false)).outerHtml().substring(0, 200));
```


----------



## member42 (16. Sep 2018)

@DerWissende Danke,so funktioniert es.Sorry habe erst nur nicht ganz verstanden, was du damit meinst.


----------



## Xyz1 (16. Sep 2018)

Ist es denn jetzt verstanden oder müssen ich und @mihe7  noch weiter erklären?


----------



## member42 (16. Sep 2018)

Ne, habe es jetzt verstanden. Der User Agent ist dafür da, damit  der Server "denkt", dass es sich um einen echten Browser handelt.


----------



## member42 (19. Sep 2018)

Habe doch noch eine Frage. Für einen Youtubeplayer möchte ich alle Links aus einer Playlist bekommen.
Mit der Powershell kann ich alle Links finden.

```
(Invoke-WebRequest "https://www.youtube.com/watch?v=dyJdLalc7TA&list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs").Links
```

Das sieht dann so aus:


Spoiler: Ausgabe





```
innerText        :
                   Python 3 Tutorial #1 - Einleitung und Installation
                   The Morpheus Tutorials
outerHTML        : <A class=" spf-link  playlist-video clearfix  yt-uix-sessionlink      spf-link " href="/watch?v=dyJdLalc7TA&amp;index=1&amp;list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs"
                   data-sessionlink="itct=CFYQyCAYACITCObLzt-hx90CFd2YVQodwXMCPij4HTIDQkZhSLDa88rapZeRdw"><SPAN class="video-thumb  yt-thumb yt-thumb-72"><SPAN class=yt-thumb-default><SPAN
                   class=yt-thumb-clip><IMG aria-hidden=true onload=";window.__ytRIL &amp;&amp; __ytRIL(this)" alt=""
                   src="https://i.ytimg.com/vi/dyJdLalc7TA/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&amp;rs=AOn4CLCxffWmdLnH_ry7qowQSp43DgpypA" width=72
                   data-ytimg="1"> <SPAN class=vertical-align></SPAN></SPAN></SPAN></SPAN>
                   <DIV class=playlist-video-description>
                   <H4 class="yt-ui-ellipsis yt-ui-ellipsis-2">Python 3 Tutorial #1 - Einleitung und Installation </H4><SPAN class=video-uploader-byline><SPAN>The Morpheus Tutorials</SPAN>
                   </SPAN></DIV></A>
outerText        :
                   Python 3 Tutorial #1 - Einleitung und Installation
                   The Morpheus Tutorials
tagName          : A
class            :  spf-link  playlist-video clearfix  yt-uix-sessionlink      spf-link
href             : /watch?v=dyJdLalc7TA&amp;index=1&amp;list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs
data-sessionlink : itct=CFYQyCAYACITCObLzt-hx90CFd2YVQodwXMCPij4HTIDQkZhSLDa88rapZeRdw

innerHTML        : <SPAN class="video-thumb  yt-thumb yt-thumb-72"><SPAN class=yt-thumb-default><SPAN class=yt-thumb-clip><IMG aria-hidden=true onload=";window.__ytRIL &amp;&amp;
                   __ytRIL(this)" alt=""
                   src="https://i.ytimg.com/vi/mNcexeCI-G4/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&amp;rs=AOn4CLDuB1LmKWMsdYTLTZJk5zEMK4rxZw" width=72
                   data-ytimg="1"> <SPAN class=vertical-align></SPAN></SPAN></SPAN></SPAN>
                   <DIV class=playlist-video-description>
                   <H4 class="yt-ui-ellipsis yt-ui-ellipsis-2">Python Tutorial #2 - Zahlen </H4><SPAN class=video-uploader-byline><SPAN>The Morpheus Tutorials</SPAN> </SPAN></DIV>
innerText        :
                   Python Tutorial #2 - Zahlen
                   The Morpheus Tutorials
outerHTML        : <A class=" spf-link  playlist-video clearfix  yt-uix-sessionlink      spf-link " href="/watch?v=mNcexeCI-G4&amp;index=2&amp;list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs"
                   data-sessionlink="itct=CFUQyCAYASITCObLzt-hx90CFd2YVQodwXMCPij4HTIDQkZhSLDa88rapZeRdw"><SPAN class="video-thumb  yt-thumb yt-thumb-72"><SPAN class=yt-thumb-default><SPAN
                   class=yt-thumb-clip><IMG aria-hidden=true onload=";window.__ytRIL &amp;&amp; __ytRIL(this)" alt=""
                   src="https://i.ytimg.com/vi/mNcexeCI-G4/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&amp;rs=AOn4CLDuB1LmKWMsdYTLTZJk5zEMK4rxZw" width=72
                   data-ytimg="1"> <SPAN class=vertical-align></SPAN></SPAN></SPAN></SPAN>
                   <DIV class=playlist-video-description>
                   <H4 class="yt-ui-ellipsis yt-ui-ellipsis-2">Python Tutorial #2 - Zahlen </H4><SPAN class=video-uploader-byline><SPAN>The Morpheus Tutorials</SPAN> </SPAN></DIV></A>
outerText        :
                   Python Tutorial #2 - Zahlen
                   The Morpheus Tutorials
tagName          : A
class            :  spf-link  playlist-video clearfix  yt-uix-sessionlink      spf-link
href             : /watch?v=mNcexeCI-G4&amp;index=2&amp;list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs
data-sessionlink : itct=CFUQyCAYASITCObLzt-hx90CFd2YVQodwXMCPij4HTIDQkZhSLDa88rapZeRdw

innerHTML        : <SPAN class="video-thumb  yt-thumb yt-thumb-72"><SPAN class=yt-thumb-default><SPAN class=yt-thumb-clip><IMG aria-hidden=true onload=";window.__ytRIL &amp;&amp;
                   __ytRIL(this)" alt=""
                   src="https://i.ytimg.com/vi/BiVQJ4dTD9o/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&amp;rs=AOn4CLBUWeNg2_ZXeUacsNhMSusIassTIw" width=72
                   data-ytimg="1"> <SPAN class=vertical-align></SPAN></SPAN></SPAN></SPAN>
                   <DIV class=playlist-video-description>
                   <H4 class="yt-ui-ellipsis yt-ui-ellipsis-2">Python Tutorial #3 - Strings </H4><SPAN class=video-uploader-byline><SPAN>The Morpheus Tutorials</SPAN> </SPAN></DIV>
innerText        :
                   Python Tutorial #3 - Strings
                   The Morpheus Tutorials
outerHTML        : <A class=" spf-link  playlist-video clearfix  yt-uix-sessionlink      spf-link " href="/watch?v=BiVQJ4dTD9o&amp;index=3&amp;list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs"
                   data-sessionlink="itct=CFQQyCAYAiITCObLzt-hx90CFd2YVQodwXMCPij4HTIDQkZhSLDa88rapZeRdw"><SPAN class="video-thumb  yt-thumb yt-thumb-72"><SPAN class=yt-thumb-default><SPAN
                   class=yt-thumb-clip><IMG aria-hidden=true onload=";window.__ytRIL &amp;&amp; __ytRIL(this)" alt=""
                   src="https://i.ytimg.com/vi/BiVQJ4dTD9o/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&amp;rs=AOn4CLBUWeNg2_ZXeUacsNhMSusIassTIw" width=72
                   data-ytimg="1"> <SPAN class=vertical-align></SPAN></SPAN></SPAN></SPAN>
                   <DIV class=playlist-video-description>
                   <H4 class="yt-ui-ellipsis yt-ui-ellipsis-2">Python Tutorial #3 - Strings </H4><SPAN class=video-uploader-byline><SPAN>The Morpheus Tutorials</SPAN> </SPAN></DIV></A>
```



Die Links stehen dort immer im outerHtml

Wenn ich das mit Jsoup mache, bekomme ich immer nur den Link vom aktuellen Video.

```
String str =  Jsoup.connect("https://www.youtube.com/watch?v=dyJdLalc7TA&list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs").get().outerHtml();
```

Woran liegt das?


----------



## member42 (19. Sep 2018)

Hat sich erledigt.


----------



## Xyz1 (20. Sep 2018)

member42 hat gesagt.:


> Woran liegt das?


Moin,
das was die Powershell dort macht ist ja auch nicht äquivalent zu dem was Jsoup macht....

Vorschlag: pauke HTML und Jsoup!

Was hast du eigentlich genau vor zu machen?


----------



## member42 (20. Sep 2018)

> Was hast du eigentlich genau vor zu machen?


Ich wollte einen Youtube Player machen.



> Vorschlag: pauke HTML und Jsoup!


Jsoup werde ich mir nochmal genauer ansehen

Die Frage hat sich erledigt,weil ich jetzt einfach das Powershell script über den Processbuilder starte und so die Links bekomme. Ist zwar nicht wirklich gut gelöst,aber immerhin funktioniert es so einigermaßen.


----------



## Xyz1 (21. Sep 2018)

member42 hat gesagt.:


> Ich wollte einen Youtube Player machen.


Du meinst Links "sammeln" oder? Anderes wird nicht klappen.


----------



## mihe7 (22. Sep 2018)

https://jsoup.org/cookbook/extracting-data/example-list-links


----------



## Code-Mode (23. Sep 2018)

Ich habe auch grade ein bisschen JSOUP gemacht. 
Habe im Prinzip ein WebScraper für Rezepte von Chefkoch und Kochbar gemacht.

Vielleicht hilft dir das ja ein wenig weiter wenn du schauen kannst wie du nach HTML Tags filterst und Tabellen ausliest.

Code ist einzusehen unter: https://github.com/codemode89/WebRecipeScraper
Schau dir da mal die DocumentParser an.

Ich wünsche dir viel Erfolg


----------



## member42 (23. Sep 2018)

DerWissende hat gesagt.:


> Du meinst Links "sammeln" oder? Anderes wird nicht klappen.


 @DerWissende  Mal sehen was daraus wird, ist aufjedenfall gut zur Übung.

@Code-Mode Danke für die Anregungen.


----------

