WebCrawler in Java

  • Themenstarter Gelöschtes Mitglied 35125
  • Beginndatum
G

Gelöschtes Mitglied 35125

Gast
hallo leute,

vor kurzem habe ich mich für ein praktikum beworben und habe auch schon eine antwort wo ich aufgefordert werde ein web crawler in java zu schreiben.

der web crawler soll folgendes können:

-den inhalt einer webseite holen
-aus dem inhalt die links extrahieren
-die extrahierten links crawlen(zurück zu step 1)
-bei 1000 links schluss machen

da ich noch keinen plan von webcrawlern hatte war ich erstmal ein wenig baff, habe mich nu erstmal schlau gemacht und ein flussdiagramm erstellt um zu gucken ob ich die sache kapiert habe. ich will nichts großes programmieren, halt nur ein crawler der den o.g. anforderungen entspricht.

ich habe also vor diesen thread als eine art mindmap zu nutzen wo ihr mir hoffentlich auch ein paar kommentare/kritik/tipps geben könntet:oops:

gibt für crawler schon klassen? also womit man aus html-dokumenten die url & links rausfiltern kann?

hab das flussdiagramm als anhang beigefügt, hoffe dass ich da keine fehler gemacht habe...

greetz
 

Anhänge

  • Drawing1.jpg
    Drawing1.jpg
    25,9 KB · Aufrufe: 74
G

Gast2

Gast
Hm, bin mir nicht ganz sicher ob du das mit dem crawler richtig verstanden hast, zumindest wär das Kontrollflussdiagramm dann falsch.
Du musst jede Seite die du durch neue Links erreichst wieder nach Links durchsuchen und damit deine Queue füllen. Wenn du dann bei insgesamt 1000 durchsuchten Links bist brichst du ab.

Was dir helfen wird sind folgende Klassen:
- URL, zum auslesen einer Seite
- Pattern und Matcher, zum rausfiltern der Links
 
G

Gelöschtes Mitglied 35125

Gast
hi elke, danke erstmal für deine rasche antwort!

meinst du dass der queue-counter bei jeder seite neu anfängt? weil ich habe mir das so vorgestellt:

rootSeite eingeben, counter von queue auf 0 setzen
rootSeite nach Links (=weiteren Seiten) durchsuchen
gefundene links in queue packen, für jede seite counter + 1
solange schritt 2 wiederholen bis counter = 1000

habe das flüssdiagramm nochmal ein wenig überarbeitet da mir selber ein fehler aufgefallen ist:D
 

Anhänge

  • Drawing1.jpg
    Drawing1.jpg
    29,1 KB · Aufrufe: 43
G

Gast2

Gast
Nein, der Counter fängt nicht bei jeder Seite wieder bei 0 an. Du würdest sonst sehr lange suchen müssen ;) Den Counter erhöhst du immer wenn du eine Seite ausließt.
 
G

Gelöschtes Mitglied 35125

Gast
@ elke, dann verstehe ich nicht ganz was an dem flussdiagramm net stimmt, könntest du mir das ein wenig genauer erklären?

@ark, danke ich werde mir erstmal die genannten libs angucken, ich muss ja dann noch alles erklären können wenns dazu kommt, also wäre das schon schön wenns ne etwas einfachere methode ist:D
 

Kjubert

Aktives Mitglied
Hallo dsordrlyPrgrmng,

mit HTMLUnit wird das ein Dreizeiler ... fast ;)

Viel Erfolg

Naja aber wär doch irgendwie cooler das selber zu machen, oder? Die Aufgabe ist ja nun wirklich nicht allzu schwer.

Der Ablauf sollte "ganz einfach" dieser sein, wenn ich das richtig verstanden habe:

  1. URL zum Auslesen setzen
  2. Seitenquelltext auslesen
  3. Quelltext nach Links durchsuchen und Links is Liste o.ä. speichern
  4. Counter (oder was auch immer) um 1 erhöhen
  5. Prüfen, ob Counter == 1000 (wenn ja -> ENDE, wenn nein -> nächster Schritt)
  6. Erste URL in der Liste als URL zum Auslesen setzen (also ab Schritt 1 wiederholen)

Das schaffst du schon ;)
 
G

Gelöschtes Mitglied 23978

Gast
Zu klären ist noch ob es 1000 verschiedene Domains sein sollen. Wenn dem so ist, musst du die gescannten Domains mitschneiden (ggf. die Basis URL aus der vollständigen URL extrahieren) und auf bereits gescannd prüfen.
 
H

hüteüberhüte

Gast

Doch nicht elke :D , EikeB

Also ich würde solche Aufgaben einfach runterprogrammieren und nicht erst noch mit UML etc. beginnen. Aber als Ergebnispräsentation wäre das natürlich schöner.

Anregungen:
- Mehrere Threads, die eine Page laden,
- threadsichere Queue (o.ä. Datenstruktur),
- eine Domain nur einmal (oder max. x-mal) laden,
- XML-/HTML-Parser vs. Regex
- usw.

Zum Flussdiagramm:
Java:
que.add(ersteUrl)
c = 0
while (c < 1000 && !que.isEmpty()) {
  que.add(read(que.get()))
  c++
}
 
Zuletzt bearbeitet von einem Moderator:

Templarthelast

Bekanntes Mitglied
Java:
que.add(ersteUrl)
c = 0
while (c < 1000 && !que.isEmpty()) {
  que.add(read(que.get()))
  c++
}


Das wäre natürlich eine schöne Lösung, wenn man einen Thread hätte, welcher die Inhaltsangaben der Seiten durchsucht und die richtigen Links zu einer quue hinzufügt. Diese Que würde dann von einem oder meheren anderen Threads durchlaufen wird.
Allerdings finde finde ich soetwas für jemanden, der einen crawler nur für ein Praktikum entwickeln soll, etwas überdimensioniert.

@TO
Falls du eine einfache und schnelle Lösung suchst würde ich, wie schon einmal angesprochen über das HTMLUnit-framework gehen. Die andere Möglichkeit, welche wahrscheinlich auch besser bei deinem Arbeitgeber ankommen würde, wäre ein eigener htmlParser, welcher die Seite per HTTPStream ließt und dann auswertet.
 

Kjubert

Aktives Mitglied
Aber ist das denn alles nötig? Gestern Abend konnt ich schlecht schlafen, da hab ich das mal ausprobiert und so gehts eigentlich fix:
Erstmal den Quelltext auslesen (kann man ja machen, wie man will), und dann so in etwa die Links rausfiltern:

Java:
private Set<URL> getLinksFromHTMLSource(String htmlSource, URL from){
	Set<URL> linkSet = new HashSet<URL>();
	int currentIndex = 0;
	int endIndex = 0;
	String currentLink;
	
	while((currentIndex = htmlSource.indexOf("href=\"", currentIndex + 1)) >= 0){
		endIndex = htmlSource.indexOf("\"", currentIndex + 8);
		currentLink = htmlSource.substring(currentIndex + 6, endIndex);
		
		if (currentLink.indexOf("http") < 0) currentLink = from.getProtocol()
														 + "://"
														 + from.getHost()
														 + from.getPath();
		
		try {
			if (currentLink.length() > 1) linkSet.add(new URL(currentLink));
		} catch (MalformedURLException e) {}
	}
	return linkSet;
}

Also der funktionierte auf Anhieb - vielleicht kann mir da ja irgendwer von den erfahreneren hier mal auf die Finger hauen, wenn ich irgendwo grobe Verbrechen begangen hab ;)
 

Empire Phoenix

Top Contributor
Kleinigkeiten sind auf jedenfall noch, was wenn ich im html 'href ="' statt 'href="' habe?
Also kurz leerzeichen behandlung beim href evt noch benötigt.

Zudem, was wenn sonderzeichen inner url drinnen sind? Browser wnadeln die automatisch um die url klasse nciht soweit ich we iß, würde ich mal testen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M HelloWorld.txt nach HelloWorld.java in Win11 funktioniert nicht Java Basics - Anfänger-Themen 4
Sniper1000 Java lässt sich auf älterem Win 7 nicht mehr installieren Java Basics - Anfänger-Themen 34
J Probleme mit drucken aus Java Java Basics - Anfänger-Themen 3
Gokul Java chart library suggestion for web application? Java Basics - Anfänger-Themen 2
D wie kann ich gcc aus einer .java datei heraus aufrufen? Java Basics - Anfänger-Themen 2
S Text Formatierung in Java Java Basics - Anfänger-Themen 2
B Erste Schritte yaml parsen in Java Java Basics - Anfänger-Themen 19
C Methoden Umlaute in Java Java Basics - Anfänger-Themen 18
W Java-PRogramm liest als EXE-File Nicht USB, jedoch aus NetBeans Java Basics - Anfänger-Themen 45
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 3
M Erste Schritte Java Primzahltester Java Basics - Anfänger-Themen 4
A csv Reader für Java? Java Basics - Anfänger-Themen 27
K Java - Enums Java Basics - Anfänger-Themen 30
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
Rookar java.lang.NoClassDefFoundError: org/json/JSONException Java Basics - Anfänger-Themen 2
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
I Backend in Java und Ansicht von Dateien in statische HTML Seiten? Java Basics - Anfänger-Themen 15
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
G Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
G Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9

Ähnliche Java Themen


Oben