Pic Download / Regex Problem

HazelNut

Mitglied
Hey, ich wollte einen kleinen Picture Downloader schreiben und hätte dazu ein paar algemeine Fragen bzw Probleme.


Ablauf:
Gebe Seitenlink ein
Suche im Source nach der jpg
Lade Bild in ein BufferedImage
Überprüfe ob es einen nachfolgendes Bild gibt (im Source)
Wenn letzes Bild erreicht -> gehe zum nächsten Chapter
Ende
Sehr schwer ;)

Dazu würde mich interessieren wie es dabei mit der Auslastung aussieht?
Sollte ich dazwischen ein paar sleeps machen oder nicht?
Oder gar mit Threads arbeiten?
Also am Anfang checken ob das Buch mehr als 1 chapter hat, wenn ja dann kann das nächste Kapitel in einem eigenen Thread ausgeführt werden.


Zum Problem:
Der Sourcecode ist soweit ich bisher gesehen habe, egal bei welchem Buch, immer der gleiche.

Leider findet mein Pattern das Bild nicht.

Zu durchsuchender String: <div id="imgholder"><a href="/buch-name/chapter/seite"><img id="img" width="800" height="1142" src="urlZumBild.jpg" alt="" name="img" /></a> </div>

urlZumBild möchte ich logischerweise haben.

Pattern: "<div id=\"imgholder\"><a href=\"/.+?/\\d+/\\d+\"><img id=\"img\" width=\"\\d+\" height=\"\\d+\" src=\"(.+)\" alt"

Mit RegexBuddy matche ich damit immer den ganzen String bis zum alt.
Leider habe ich jetzt seit einem Jahr nichts mehr mit Regexes gemacht und noch nie in Java.
Habe mich zwar eingelesen haber irgendwas passt da einfach nicht....
Und nein, einfach nach href oder jpg kann ich nicht abfragen.

Java:
Pattern regex = Pattern.compile("<div id=\"imgholder\"><a href=\"/.+?/\\d+/\\d+\"><img id=\"img\" width=\"\\d+\" height=\"\\d+\" src=\"(.+)\" alt");
	Matcher regexMatcher = regex.matcher(s);
	if (regexMatcher.find()) {
		ResultString = regexMatcher.group();

Wäre über eine Erklärung erfreut, da mich die Tutorials irgendwie nicht weiter bringen.... :oops:
 
S

SlaterB

Gast
fange langsam an:
kürze den 'Zu durchsuchender String:' auf <div id="imgholder">

und das Pattern auf: "<div id=\"imgholder\">"

funktioniert? dann als nächstes das a href rein usw., für den Link darin zunächst /.+ testen, dann das kompliziertere

wenn irgendwann ein Fehler kommt, und Denken wirklich nicht weiter geht, dann poste wie weit es geht mit welchem Pattern
und ab welchem Schritt es nicht geht mit welchem Versuch
 

Empire Phoenix

Top Contributor
Ich würde das als statemachine abhandeln.

suche nach /buch-name/chapter/seite
wenn gefunden nach src="
wenn gefunden nach " alt="
zwischen den letzten beiden ist dann dein bild
 

HazelNut

Mitglied
Lol, hab dann daran einfach nochmal rumgespielt und group(1) gemacht und auf einmal gings, obwohl ich es zuvor schon hatte ....

suche nach /buch-name/chapter/seite

Hmm verstehe nicht ganz was du genau meinst.


Aber hätte da nochn anderes Problem :)
Uhh sogar bei der gleichen Methode.

Habe jetzt leider bemerkt, dass die neuesten Chapter wohl wo anders abgespeichert werden, aber das ist ja auch nicht das Problem.
Das Problem ist, dass dabei bei den neuen auch der source verändert wurde.

Zu suchender String:
Code:
<div id="imgholder"><div id="zoomer" class="zoomimg zoomtop">+ Larger Image</div>
<a href="/name/chap/site"><img id="img" width="800" height="553" src="urlZumBild" alt="" name="img" /></a> <div class="zoomimg zoombottom">+ Larger Image</div>
</div>
Okay hat sich auch erledigt, geht aus irgendeinem Grund auf einmal.


Interessieren würde mich wenn ich mein Programm so erweitern will, das ich von weiteren Seiten Bücher laden kann.
Wie wäre so etwas zu realisieren?
Checken um welche site es sich handelt und dann die Methoden dementsprechend aufrufen ist klar.
Aber das kann doch nicht die einzige Möglichkeit sein?

Zb auf der zweiten Seite stehen alle nachfolgenden Links direkt komplett im Sourcecode und bei der jetzigen steht nicht mehr als ein verweis auf das nächste pic.
Und um die Bilder rauszusuchen muss ich ja nur konditionelles regex verwenden aber das wird dann ja auch ziemlich unschön und relativ undynamisch.

mfg
 
S

SlaterB

Gast
Intelligenz in Computern ist ein ehrvolles Ziel, vielleicht schaffst du es als erster, dann musst du nicht mehr viel tun

ansonsten ist 'Undynamik', mühevolle Einzellösungen usw. der Kern der Programmierung,
besonders von einem System gegenüber anderen, leider
 
Zuletzt bearbeitet von einem Moderator:

HazelNut

Mitglied
Okay mich hätte nur interessiert was einfacher wäre alles in konditionelle Regexe zu packen oder für jede Seite fast schon eine eigene Klasse.

Anyway:
Programm funktioniert soweit.
Wollte jetzt noch eine GUI dazu machen und habe da ein kleines static PRoblem :) (Habe das FAQ bereits durchgelesen)

Habe eben 2 Klassen, GUI und FileDownload
In der Main wird die GUI initialisiert und nachdem man auf nen Start Button drückt wird ein FileDownload Objekt angelegt.
Damit ich eine debug Ausgabe habe, habe ich bei der GUI eine Area.

Java:
public class ImageDownloader {
static DownloadGUI gui;

 public static void  createDownloadGUI(){
          gui = new DownloadGUI();
     }

 public static void main(String[] args) throws IOException, Exception {
        createDownloadGUI();
        //DownloadGUI gui = new DownloadGUI();
        gui.setVisible(true);

Ist das ne schöne Lösung oder nicht?
Außerdem, wie könnte ich es so verwenden wie ich im auskommentierten Teil stehen habe?
Anstatt createDownloadGUI(),
ImgaeDownloader benötigt eine Instanz von DownloadGUI.
Bzw, gibt es auch ne Möglichkeit die Membervariable non static zu machen ?


Zu Threads:
Ich sehe das, das Programm läuft, jedoch bekomme ich keine Ausgaben in meine Area, obwohl doch welche erstellt werden sollten (wird in ImageDownloader aufgerufen). Da das Programm doch sowieso abläuft dürfte doch zumindest in der Zeit in der ich meine debugMethode aufrufe der EDT nicht mehr geblockt sein?


Wenn ich jetzt für ImageDownloader das Interface Runnable implementiere und dann bei dem Start Button aufrufe müsste es doch so aussehen:

new Thread(down).start();

Die gesamte Logik läuft dann in der run() Methode ab, gibt es denn eine Möglichkeit nicht die run zu verwenden sondern eine andere?
Wie kann ich den ImageDownloader Thread automatisch stoppen, wenn das Ende des Buches erreicht ist?
Er soll innerhalb von ImageDownloader gestoppt werden, finde dafür jedoch keine Möglichkeit.

Wenn ich den Thread per GUI unterbrechen möchte, ist
new Thread(down).suspend();
korrekt?
 
S

SlaterB

Gast
eine andere Methode als run für Thread ist so wie eine andere Methode als main für ein Programm,
du kannst Untermethoden usw. aufrufen, aber den Start, die eine Methode in der alles beginnt, die ist nicht zu ändern

> new Thread(down).suspend();
das wäre zum einen ein neues Thread-Objekt, noch nichmal als Thread gestartet, du willst aber sicherlich irgendwas,
was zu diesem Zeitpunkt schon lange da ist

in
Thread (Java 2 Platform SE 5.0)
kannst du ne Menge Kommentare, Nicht-Empfehlungen zu Thread-Methoden lesen,
im Internet finden sich gewiss viele Themen dazu

mein Kurzhinweis: ein Thread ist quasi nicht von außen reinzureden, setze boolean-Informationen,
und der Thread schaut selber ab und zu nach und unterbricht vielleicht aus eigenem Antrieb seine Arbeit

> Wie kann ich den ImageDownloader Thread automatisch stoppen, wenn das Ende des Buches erreicht ist?

von außen gilt für Stoppen etwa dasselbe wie für suspend, von innen ist ein Thread zu Ende, wenn die run-Methode fertig bearbeitet ist,
aus Endlos-Schleifen mit return oder Schleifenbedingung raus,
allgemein etwas unsauber aber effektiv, falls viele verschachtelte Methoden abzubrechen sind: RuntimeException
 
Zuletzt bearbeitet von einem Moderator:

HazelNut

Mitglied
Ähh ja das mit Threads habe ich schon gelesen, aber ich dachte, das es doch relativ egal wäre bei einem Projekt mit 500 Zeilen :)

Aonsonsten könnte ich doch in die run() zwei whiles machen bei der die äußere immer true ist und die innere eben je nachdem ob ich auf pause drücke oder nicht.
Meine Frage mit suspend bezog sich auch genau auf das dann ja wieder ein neuer Thread erstellt wird.
Aber irgendwie kann ich diesem Trhead keinen Namen setzen bzw abfragen, dass geht dann wohl nur wenn ich von der Superklasse Thread ableite und nicht von Runnable?

Wie kann ich den ImageDownloader Thread automatisch stoppen, wenn das Ende des Buches erreicht ist?
Hmm was ich mir bei der Frage gedacht habe fällt mir gerade gar nicht ein, was du geschrieben hast ist mir klar, hmmmm


Okay, eigentlich ist soweit alles klar, nur das Problem mit static würde mich wirklich noch interessieren, warum funktioniert das wenn ich es in eine Methode auslagere aber nicht wenn ich es direkt in der main schreibe? Ich habe das jetzt immer so gemacht ohne darüber nachzudenken.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Tobero Download .jar von github lädt kaputte Datei runter Allgemeine Java-Themen 3
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
B Download von dateien Allgemeine Java-Themen 2
OnDemand Download Textdatei falsches Charset Allgemeine Java-Themen 1
OnDemand FTP Download Charset Allgemeine Java-Themen 1
HarleyDavidson Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern Allgemeine Java-Themen 1
J Java Progressbar & Download Probleme Allgemeine Java-Themen 10
J Java Download Filedownload File.getFileName Allgemeine Java-Themen 3
J Java JSON-Datei aus .Zip auslesen und Download mit Progress Bar Allgemeine Java-Themen 20
B Download und Öffnen einer Datei mit Java Allgemeine Java-Themen 6
E Aktienkurs Download API? Allgemeine Java-Themen 2
J Download: Filename + Process waitFor() Allgemeine Java-Themen 5
J Java Communications 3.0 API Download ? Allgemeine Java-Themen 18
T HTTP Skript für Passwortgeschützte Seite :: Häkchen setzen und Download Allgemeine Java-Themen 4
W Java download Allgemeine Java-Themen 4
I URLConnection Upload/Download Allgemeine Java-Themen 3
T Firefox und Webstart: Ohne JNLP Download Allgemeine Java-Themen 2
E Performance website download Allgemeine Java-Themen 13
MQue FTP Verbindung download Allgemeine Java-Themen 5
X Will JAR Datei zum Download anbieten, worauf muss ich rechtlich achten? Allgemeine Java-Themen 2
hdi [Free Download] Film-Datenbank Allgemeine Java-Themen 30
Benji0815 DOWNLOAD von Dateien Allgemeine Java-Themen 2
B maven 2 error bei plugin download Allgemeine Java-Themen 7
J WebBrowser Java Programm Download, Ausführen? Allgemeine Java-Themen 2
A JRE auf eigener Seite verlinken oder zum Download anbieten? Allgemeine Java-Themen 13
M Datei download mit versteckter URL Allgemeine Java-Themen 3
W JNI - C API ? Download ? Allgemeine Java-Themen 3
M Download Covers Allgemeine Java-Themen 2
T Soll ich meine Software als freeware zum download geben? Allgemeine Java-Themen 15
M deutsche Dokumentation zum Download? Allgemeine Java-Themen 7
C Download von Bildern etc. realisieren Allgemeine Java-Themen 2
H Frage regex greater than less than Allgemeine Java-Themen 7
N Regex schlägt nicht an Allgemeine Java-Themen 10
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
T regex case insensitive trimmed Allgemeine Java-Themen 6
S Zeichen | in regex Allgemeine Java-Themen 8
X Regex mit mehreren Bedingungen machen Allgemeine Java-Themen 5
N Hilfe bei RegEx benötigt Allgemeine Java-Themen 3
C Java17 und Regex Allgemeine Java-Themen 13
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
N Gierigen Regex in nicht-gierigen umwandeln Allgemeine Java-Themen 4
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
OnDemand Regex von bis Allgemeine Java-Themen 6
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
G Regex Allgemeine Java-Themen 2
L regex ganzer string? Allgemeine Java-Themen 2
MiMa Geldbetrag mit regex ermitteln. Allgemeine Java-Themen 14
W RegEx Stringliteral finden - Jflex Allgemeine Java-Themen 5
D Regex Probleme Allgemeine Java-Themen 2
Kirby.exe Regex charakter ignorieren Allgemeine Java-Themen 12
S Java SAT (Haltbarkeitsproblem) mit Regex Allgemeine Java-Themen 6
S [Regex] Nur diese Zeichen beachten Allgemeine Java-Themen 1
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
S Regex mit UND-Verknüpfung Allgemeine Java-Themen 1
P RegEx für Zeiten Allgemeine Java-Themen 7
D Regex: Komplettes Wort bekommen Allgemeine Java-Themen 3
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P RegEx Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
Y regex | n-faches Vorkommen oder gar keins Allgemeine Java-Themen 6
turmaline Regex gegen Regex prüfen Allgemeine Java-Themen 4
HarleyDavidson Regex - Optimierung Allgemeine Java-Themen 4
M Regex für Zahleneingabe in JavaFX Textfield Allgemeine Java-Themen 18
T Best Practice Wortregeln RegEx Allgemeine Java-Themen 11
A ALTER TABLE mit Hilfe von RegEx zerlegen, splitten Allgemeine Java-Themen 5
H Interpreter-Fehler Regex kompiliert nicht Allgemeine Java-Themen 5
M RegEx alle Matches ausgeben Allgemeine Java-Themen 5
Iron Monkey Mit Regex nach Beträge suchen Allgemeine Java-Themen 4
T REGEX Erklaerung Allgemeine Java-Themen 14
T Nur innerhalb des regex-Match ersetzen Allgemeine Java-Themen 9
F Frage zu Regex möglich Allgemeine Java-Themen 4
M Regex... mal wieder Allgemeine Java-Themen 3
H RegEx - Ersetze alles bis Leerzeichen Allgemeine Java-Themen 5
S regex verbrät CPU Allgemeine Java-Themen 6
V Regex Bereichs Filter Allgemeine Java-Themen 4
127.0.0.1 RegEx _ und 0-9 Allgemeine Java-Themen 45
S Entfernen von allen Nicht-Buchstaben chars aus einem String ohne Regex..? Allgemeine Java-Themen 10
P Java String Regex Allgemeine Java-Themen 2
AyKay Regex XPath Allgemeine Java-Themen 4
C Regex (Case insensitive und Umlaute) Allgemeine Java-Themen 4
D Regex Raute erkennen Allgemeine Java-Themen 2
nrg Zweistelligen Zahlenbereich mit RegEx Allgemeine Java-Themen 8
GilbertGrape Regex-Problem Allgemeine Java-Themen 2
W Denkblockade RegEx Allgemeine Java-Themen 2
S eigene regEx schreiben Allgemeine Java-Themen 4
C Regex expandieren Allgemeine Java-Themen 6
C Regex Überschniedung von Ausdrücken Allgemeine Java-Themen 16
reibi RegEX - Teilstring Allgemeine Java-Themen 6
R Java-RegEx terminiert nicht Allgemeine Java-Themen 3
M Regex: Ich stehe auf dem Schlauch Allgemeine Java-Themen 2
V Kleines Regex-Problem Allgemeine Java-Themen 3
B Regex "Problem" Allgemeine Java-Themen 4
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
J Regex: Fertige URLS aus Javascript Allgemeine Java-Themen 3
N Java regex Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben