Java Downloader für Web-Comics - wie?

Hallo alle zusammen,

ich würde gerne als erstes kleines/großes Programmierprojekt einen Downloader schreiben mit Java und JFC/Swing, mit den man Web-Comics rekursiv von Webseiten herunterladen kann, die diese frei anbieten. Es gibt viele Webseiten dafür und auch viele Tools, die das bereits mehr oder minder gut können. Ich habe mir deren Source-Code bereits angeschaut und im Regelfall sind dort alle bekannten Seiten und deren URL Struktur einprogrammiert, was mir nicht gefällt. Ein Programm sollte in meinen Augen die URL Struktur selbst erkennen können. Hier türmen sich allerdings bei mir ein paar Fragen, da mir nicht alle Möglichkeiten bekannt sind, wie man daran gehen könnte, da ich mich nur sehr bedingt mit Web-Technologien auskenne.

Folgendes habe ich in Erfahrung bringen können:

1.) Die Webseiten sind immer relativ gleich aufgebaut. Die Bilder sind als einfache Bilddateien hinterlegt, meisten Jpeg in einem src-tag. Ein Comic hat immer eine bestimmte URL Struktur z.B. http://xxx-de/manga/manga_name/c000/1.html , wobei c000 der Comic ist und 1.html dann eine Manga/Comic Seite ist welche dann hochgezählt wird (2.html, 3.html, ... usw.).

2.) Als Benutzer gibt zwei Möglichkeiten die nächste Seite zu erreichen. Entweder man ändert die URL manuell wie oben beschrieben, oder man "klickt" auf das Bild wodurch sich die nächste Seite öffnet. Dies ist irgendwie in einem "href-Tag" eingebettet , zumindest bei manchen Seiten. Dort steht dann z. B. soetwas wie "onclick=return next_page()". Ich denke dass dies für das "umblättern" verantwortlich ist.

Worum geht es nun eigentlich?

Der Benutzer möchte ein Comic archivieren. Das abspeichern jeder Bilddatei und anlegen einer Ordner Struktur ist allerdings sehr aufwändig und soll automatisiert werden. Die Bilder sollen nachher als PDF zusammengefügt werden (übernimmt eine Bibliothek und ist für das Problem nicht relevant).

Erste Ideen meinerseits?

Der Benutzer könnte die ersten 3 URLS dem Programm mitteilen. Ich schreibe einen Parser, der daraus die URL-Struktur erkennt. Nachteil: Es wäre besser, wenn der Benutzer nur eine URL angeben müsste. Die "Cover-Seite" sieht meistens so aus

http://xxx-de/manga/manga_name/c000/ (Cover Seite)
http://xxx-de/manga/manga_name/c000/1.html (Erste Seite)


Fragen die sich mir generell Stellen

1) Wie komme ich anhand eines Links an eine URL Struktur? Ist das überhaupt möglich? Denn schließlich könnte auch statt 1.html soetwas stehen wie 1abc.html o.ä => einfaches hochzählen auf gut Glück ist keine gute Idee.

2) Gibt es eine andere Möglichkeit, an alle Webseiten eines Comics zu kommen, ohne dies anhand eines Parsers zu tun und dann "zu raten"? Ich weiß z. B. nicht, ob man irgendwie über die Webseite generell an alle Links kommen kann. Theorethisch müsste das möglich sein, ich habe schon mal einen sogennanten "Web Scraper" gesehen, der eine komplette Webseite herrunterladen kann. Irgendwie muss der das "ja machen". Wäre vielleicht sogar die bessere Variante als "einfaches hochzählen" der html URL weil mir momentan nicht klar ist, wie man das "ende" erkennen könnte um den Vorgang abzuschließen

3) Wie lokalisiert man das Bild auf der Seite am besten automatisch? Eine "einfache" Möglichkeit wäre, dass sich das Tool für das größte Bild auf der Seite entscheidet. Würde wahrscheinlich sogar funktionieren, kommt mir aber wie eine "Kopf durch die Wand" Methode vor und ist eventuell Fehleranfällig.

4) Gibt es noch eine weitere Möglichkeit , falls das "URL-Parsen" fehlschlägt? Es gibt ja sicher für Admins die Möglichkeit (bislang noch nicht gesehen) die URL Struktur "zu verstecken". Allerdings könnte man ja irgendwie auch an die Seiten kommen, in dem man die Tatsache nutzt, das man per Mausklick auf die nächste Seite kommen. Vielleicht auch ein genereller Ansatz?

_____

Was würde ich gerne von euch wissen?

Auf jedenfall keine konkrete Implementation. Mir geht es vor allem um die Ideen. Vielleicht kennt ihr ein paar Schlagworte/Technologien, die genau das tun, was ich eigentlich machen will, die ich aber nicht kenne (z. B. "Web scraping").

Wie würdet ihr da herangehen? Was ist möglich, was ist nicht möglich?

Ich bedanke mich herzlich bei euch.

Viele Grüße

Moro
 
Wirf mal einen Blick in die Quelltexte der Sites. Oft findest du dort einen RSS-Link. Daten aus einem RSS zu ziehen dürfte weitaus einfacher sein als bei verschiedenen Seiten auf URL- und Seitenstrukturen einzugehen und für diese passende Regelsätze zu basteln.
 
Ich kann bitmuncher nur beipflichten. Ich habe schon öfter in Perl solche Crawler gebastelt und ich musste auch für jede Seite speziell anpassen. Als Mensch kann man die Logik oft schnell erkennen und auch in ein entsprechendes Programm verpacken, aber das ganze dynamisch zu machen ist sehr komplex.
 
Vielen Dank für eure Antworten.
Das mit RSS ist eine gute Idee, wird leider aber nicht von allen Seiten angeboten. Werde ich mir aber noch mal genauer ansehen da ich mit RSS bislang noch nichts am Hut hatte.

Wahrscheinlich habt ihr aber Recht, dass das automatisiert wohl nur sehr schwer geht und wahrscheinlich immer derartig Fehleranfällig sein wird, so dass der Benutzer das Programm irgendwann entnervt ersetzt weil er keine brauchbaren Ergebnisse bekommt.

Ich muss das nochmal durchdenken. Da ich die Seiten nicht per se "fest codieren" (sprich in Java Code so wie es die meisten tun) möchte, wäre ja vielleicht folgendes eine Möglichkeit.

- Mein Programm liest permanent eine Art XML Datei ein, in dem potentielle Seiten und deren Struktur niedergeschrieben bzw. einheitlich definiert ist.

Das hätte den Vorteil, dass Benutzer selber einfach Seiten hinzufügen könnte und somit der Datensatz an Seiten ohne Programmmierkentnisse erweiterbar wäre. Ich denke das dass machbar ist (auch für mich), weil die Seiten fast alle die gleiche URL Struktur haben. Das Problem mit 1.html vs. 1abc.html und dem "hochzählen" ließe sich vielleicht dann mit einer einfachen Form von regulären Ausdrücken regeln.

Darauf aufbauend werde ich mal versuchen, einen kleinen Algorithmus zu schreiben, der dem Parser ermöglicht selber eine URL Struktur aus mehreren gegeben URLS zu extrahieren und in dieses XML-artige Schema zu speichern. Keine Ahnung ob das klappt (wahrscheinlich bei manchen Seiten, bei manchen nicht), aber dann kann der Benutzer selber noch versuchen, eine dem Datensatz nicht bekannte Seite hinzuzufügen, entweder manuell oder automatisiert.

Mal schauen ob das so klappt. Soll ja irgendwann auch fertig werden und halbwegs brauchbar sein :) !

Viele Dank euch
 
Zuletzt bearbeitet:
Zurück
Oben