Quelltext - Urls filtern

Status
Nicht offen für weitere Antworten.

MR.T

Mitglied
Hallo erstmal

Mein Problem ist folgendes ich versuche über Java ein Programm zu coden welches den Quelltext einer Seite ausliest um danach die urls zu filtern. Mein Problem ist aber das ich es einfach nicht hinbekommen die Urls zu filtern, den Quelltext hab ich schon einmal geschafft runterzuladen und zwar mit:

Code:
package quelltext;

import java.net.URL;
import java.util.Scanner;

public class Main {

    public static void main(String[] args )throws Exception{

       Scanner url = new Scanner(new URL("Url der Seite").openStream()); 
       
          while(url.hasNextLine()) 
                          
                System.out.println(url.nextLine());   
          }

}





das funktioniert auch bis jetzt schön und gut nur weis ich nicht was ich benutzen muss um den Quelltext letztendlich von <a href="http://www nach "> zu filtern da sich der Inhalt der Urls ändert. Wahrscheinlich hab ich die Lösung übersehen da ich damit jetzt 10 stunden verbracht hab und 1000 mal gegoogelt bin ein totaler noob in Java aber hoffe das sich des bald ändert.

Ich hoffe ihr versteht mein Problem und könnt mir helfen im voraus schon mal danke Mr.T
 

virtualAudio

Aktives Mitglied
Hey,

also ich bin kein großer HTML-Könner,

aber wenn Du nur diese Urls aus den <a> tags suchen willst, dann würd ich eben erstmal nach "<a " und von dort aus nach dessen Ende "/a>" suchen. Dazwischen müsste ein "href" liegen das dann (von einem = und dann einem " gefolgt ) zu Deinem Url führt. Der geht dann wiederrum bis zum nächsten " wobei man "escapte" " (also \") auslassen sollte...wobei...die url Konvention sowas denk ich garnicht zulässt...gibts da nicht diese %irgendwas als Ersatz? Ich hoffe ich hab den Aufbau dieses tags richtig verstanden....wenn ja würd ichs so machen
(schaut lang aus...aber sind nur viele kommentare ;) )

Code:
import java.util.Vector;

public class AhrefSuche {

	
                public static void main(String[] args) {
	
		String s = "kjfhdj<a href = \"http://www.google.at\" nochwas=\"juhuuu\"sdfs" +
				"dfsdf>ein link</a> und dann stehn da so toole sachen wie <script ty" +
				"pe=\"text/virtualaudio\"></script> und dann auch mal wieder ein" +
				"<a href=\"www.lasmichinruh.dee_ehh\">und noch ein link</a>";
		
		String[] urls = urls(s);
		System.out.println("TestString: '"+s+"'");
		System.out.println("urls:");
		
                                for(String u:urls){
			System.out.println(u);
		}
		
	}

	
	private static String[] urls(String htmlText){
		
		Vector<String> urls = new Vector<String>();
		
		// du suchst anfang und ende vom a-tag
		
		int e = 0; // das brauchen wir um zu wissen von wo wir weitersuchen
		while (true) {

			int a = htmlText.indexOf("<a ", e);
			if(a==-1){
				// nix gefunden
				break;
			}
			System.out.println("atag-Anfang gefunden bei Index = " + a);
			e = htmlText.indexOf("/a>", a);
			if(e==-1){
				// nix gefunden
				break;
			}
			
			// dazwischen muss ein href sein
			String atag = htmlText.substring(a, e);

			
			/*
			 * ich nehm noch die spaces raus, ein url kann sowas meines Wissens
			 * nach eh nicht haben um "href=" && "href =" zu
			 * finden
			 */
			atag = atag.replaceAll(" ", "");

			
			// suche href in atag das \" ist im Endeffekt nur ein "
			int ha = atag.toLowerCase().indexOf("href=\"".toLowerCase());
			ha += "href=\"".length();
			
			
			// wenn wir keinen href Anfang finden suchen wir auch kein Ende
			if (ha == -1) {
				System.err.println("Kein 'href' im a-tag!!");
			} else {

				// suche das ende von href also ein " (ich muss hier \"
				// schreiben wie oben)  wir suchen ab dem gefundenen href
				int he = ha;
				do {
					he = atag.indexOf("\"", he + 1);
				} while (atag.charAt(he - 1) == '\\' || he == -1);

				if (he != -1) {
					// und wenn ich mich nicht irre müsste das dann der url sein
					urls.add(atag.substring(ha, he));
				}
			}
		}
		
		
		// wandelt den Vector noch in ein Array
		return urls.toArray(new String[]{});
	}
}


lg Andi
 

0x7F800000

Top Contributor
also ich bin kein großer HTML-Könner
...und in der java api gibts auch noch ne menge zu entdecken :p

Diesen ganzen extreme-lowlevel-kram braucht man nicht, für solche simplen sachen gibts in der api schon genug moeglichkeiten, hier sind zwei:

Code:
Code:
//fuer den ersten ansatz:
import java.util.regex.*;

//fuer den zweiten ansatz ( externe jars jdom und jaxen erforderlich)
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.xpath.*;
import java.io.*;
import java.util.*;

class TEST{

	public static String reverse(String s){
		return s.equals("")?"":reverse(s.substring(1))+s.charAt(0);
	}
	
	public static void main(String[] args) throws JDOMException, IOException{
		
		// beispiel-html code
		String html=
			"<html>" +
			"	<div>" +
			"		<h1>Lalalalala</h1>" +
			"		

blbblhabalbalabla [url='www.yahoo.com']yahoo[/url] dbajshdbjadbasdhga</p>" +
			"		[url='www.google.de']google[/url]" +
			"	</div>" +
			"</html>";
		
		System.out.println("Ansatz 1:");
		/*ANSATZ 1: brutal mit regex drauf einpruegeln
		 * nachteile:	man muss zB auf kleinigkeiten wie "" oder '' achten obwohl es in xml dasselbe bedeutet
		*/
		Matcher matcher=Pattern.compile("<a[^<>]*href[\t ]*=[\t ]*[\"|']([^\"']*)[\"|'][^<>]*>").matcher(html);
		while(matcher.find()) System.out.println("treffer="+matcher.group(0)+" url="+matcher.group(1));
		
		System.out.println("\nAnsatz 2:");
		/*ANSATZ 2: etwa mit jdom document bauen, per xpath die a-tags raussuchen
		 * nachteil: die jdom-geschichte ist anfangs ein wenig unuebersichtlich
		 * und man muss sich mit zwei externen jars rumpruegeln
		 * (in javax gibts auch irgendsowas, aber ich find's nicht so intuitiv)
		 */
		Document doc=(new SAXBuilder()).build(new StringReader(html));
		for(Element e:(Collection<Element>)XPath.selectNodes(doc, "//a")){
			System.out.println("element="+e.toString()+" url="+e.getAttributeValue("href"));
		}
	}
}

Die erste funktioniert auf buchstaben-ebene, da lässt man den regex drauf los und holt sich die entsprechenden zeichenketten. Wenn das kein valides xml ist, ist das dem regex vollkommen egal. Wenn du das später in irgendeinen bot reinbauen willst, der auf düsteren verstümmelten seiten herumwandert, dann musst du das wohl auf diese etwa unsauberere art machen, weil es seiten gibt, die eben kein valides xml beinhalten, aber trotzdem irgendwie von browsern wohl oder übel dargestellt werden.

Die zweite möglichkeit setzt voraus, dass die seite zumindest ein gültiges xml-dokument ist. Dann wird das document geparst, und man kann sich gemütlich mit xpath die elemente aussuchen, die man grad haben will.

Ergebnis:
Code:
Ansatz 1:
treffer=<a id='blup' href='www.yahoo.com'> url=www.yahoo.com
treffer=<a href='www.google.de'> url=www.google.de

Ansatz 2:
element=[Element: <a/>] url=www.yahoo.com
element=[Element: <a/>] url=www.google.de

geht beides mit jeweils 2-3 zeilen, wie man sieht...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Quelltext mit komischen griechischen Zeichen Java Basics - Anfänger-Themen 4
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
F Webseiten Quelltext auslesen Java Basics - Anfänger-Themen 5
C Quelltext mit Formatierungs- und Style-Informationen versehen Java Basics - Anfänger-Themen 7
S HTML-Quelltext hinter HTTPS Java Basics - Anfänger-Themen 1
D Erste Schritte Suche Quelltext Java Basics - Anfänger-Themen 7
J QuellText Frage Java Basics - Anfänger-Themen 1
X Quelltext einen Tic Tac Toe Spiels erklären Java Basics - Anfänger-Themen 4
U Website Quelltext auslesen - Javaskripte im Hintergrund? Java Basics - Anfänger-Themen 4
T Quelltext wird nicht compiliert obwohl er Fehlerfrei ist. Java Basics - Anfänger-Themen 4
O Java will mir den Quelltext nich zu Bytecode Compilieren Java Basics - Anfänger-Themen 24
J Quelltext einer Homepage auslesen Java Basics - Anfänger-Themen 14
R Problem mit Quelltext : Kommazeichen Java Basics - Anfänger-Themen 7
E Quelltext für Grafik verschwindet Java Basics - Anfänger-Themen 9
R Quelltext sachen rausfiltern Java Basics - Anfänger-Themen 16
R Input/Output Formular absenden und Quelltext auslesen Java Basics - Anfänger-Themen 5
A Komentieren von Quelltext Java Basics - Anfänger-Themen 12
D Quelltext richtig verstanden? Java Basics - Anfänger-Themen 7
E Korrekter Quelltext? Java Basics - Anfänger-Themen 17
F HttpURLConnection Fehler beim Quelltext holen Java Basics - Anfänger-Themen 6
K Erste Schritte quelltext hilfe anfänger Java Basics - Anfänger-Themen 8
M Quelltext auslesen und diesen in einen String schreiben Java Basics - Anfänger-Themen 3
G Internet-Zugriff // URL posten, Quelltext einlesen Java Basics - Anfänger-Themen 5
E Compiler-Fehler Quelltext aus Buch erzeugt Fehler Java Basics - Anfänger-Themen 3
H Methoden Problem mit get-methode im Quelltext Java Basics - Anfänger-Themen 17
B Quelltext einlesen Java Basics - Anfänger-Themen 12
L Quelltext von vorgefertigten Klassen ansehen Java Basics - Anfänger-Themen 4
StrikeTom Quelltext einer Internetseite auf JTextArea anzeigen Java Basics - Anfänger-Themen 4
K Passage im Quelltext verstehen Java Basics - Anfänger-Themen 2
M Quelltext kürzen Java Basics - Anfänger-Themen 8
F Aus UML Diagramm Quelltext Java Basics - Anfänger-Themen 7
A Quelltext Java Basics - Anfänger-Themen 21
N kommentierter Quelltext zum Üben erwünscht Java Basics - Anfänger-Themen 6
R Quelltext einfügen und kompilieren Java Basics - Anfänger-Themen 4
D Quelltext zu vereinfachen? Java Basics - Anfänger-Themen 4
G Mit Java Quelltext auf Element untersuchen. Java Basics - Anfänger-Themen 5
G Brauche ein paar erklärungen zu Quelltext Java Basics - Anfänger-Themen 5
Y Einfachen Quelltext in UML darstellen mit Eclipse Java Basics - Anfänger-Themen 8
S Verständnissprobleme mit Quelltext - Make Typ Java Basics - Anfänger-Themen 13
G Quelltext von Methoden in der Klasse Math Java Basics - Anfänger-Themen 11
D Quelltext schützen ? Java Basics - Anfänger-Themen 16
M quelltext html-seite speichern + links speichern Java Basics - Anfänger-Themen 2
B NSD-Diagramme aus Java-Quelltext erstellen! Java Basics - Anfänger-Themen 3
P Quelltext nicht kompilierbar Java Basics - Anfänger-Themen 15
I translate.java - kein sichtbarer fehler im quelltext Java Basics - Anfänger-Themen 18
L Quelltext problem Java Basics - Anfänger-Themen 46
G Quelltext compilieren und öffnen Java Basics - Anfänger-Themen 11
M Quelltext vom Applet Java Basics - Anfänger-Themen 20
M brauche hilfe mit folgendem quelltext Java Basics - Anfänger-Themen 7
V Quelltext einer Homepage einlesen Java Basics - Anfänger-Themen 12
N Quelltext durchsuchen ggfls Alarm schlagen. Java Basics - Anfänger-Themen 29
L quelltext kompilieren Java Basics - Anfänger-Themen 2
G eigenen Quelltext ausgeben Java Basics - Anfänger-Themen 8
G Html Quelltext auslesen der passwortgeschützt ist Java Basics - Anfänger-Themen 4
R Quelltext einer HTML-Seite auslesen Java Basics - Anfänger-Themen 2
M Wo liegt der Quelltext von System.out.println() Java Basics - Anfänger-Themen 3
M Handy Programm, kompletter Quelltext.Methodische Fehler? Java Basics - Anfänger-Themen 3
S Quelltext mit Fehlern Java Basics - Anfänger-Themen 12
U Abkürzung in Quelltext :(( Java Basics - Anfänger-Themen 7
0 Alle URLs aus einer Zeile extrahieren? Java Basics - Anfänger-Themen 6
V JSON-Objs aus JSON-Obj filtern und löschen (Manipulation ohne Kenntnis der vollst. Struktur) Java Basics - Anfänger-Themen 12
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
L Zahlungen nach Monat filtern Java Basics - Anfänger-Themen 2
L Texte filtern Java Basics - Anfänger-Themen 36
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
S Integer aus Array filtern Java Basics - Anfänger-Themen 4
P Signal Filtern Java Basics - Anfänger-Themen 1
J Objekttypen vergleichen und filtern Java Basics - Anfänger-Themen 6
K Lambda - kompliziertes filtern Java Basics - Anfänger-Themen 5
MrSnake ObservableList filtern Java Basics - Anfänger-Themen 5
N Collection sortieren/ filtern Java Basics - Anfänger-Themen 7
J Textdatei filtern und bearbeiten Java Basics - Anfänger-Themen 1
B Sortieren und Filtern von Tabellen Java Basics - Anfänger-Themen 6
B Input/Output output Datenstrom filtern Java Basics - Anfänger-Themen 0
B Klassen Doppelte werte Filtern XML, Datenbank und DOM Java Basics - Anfänger-Themen 3
Java-DAU String filtern Java Basics - Anfänger-Themen 22
L Palindrome aus Sätzen filtern Java Basics - Anfänger-Themen 53
S Liste speziell filtern Java Basics - Anfänger-Themen 20
Kaniee CharArrayWriter filtern Java Basics - Anfänger-Themen 4
S Datensätze filtern Java Basics - Anfänger-Themen 3
A String mittels RegEx filtern Java Basics - Anfänger-Themen 13
F String filtern und Systeminfos Java Basics - Anfänger-Themen 19
X Strings filtern? Java Basics - Anfänger-Themen 10
J Aus einem String unbekannte zeichen filtern Java Basics - Anfänger-Themen 11
J Regex + Match Zahlen filtern Java Basics - Anfänger-Themen 5
S LinkedList<String[]> filtern und sortieren Java Basics - Anfänger-Themen 9
S String filtern mit replace -> Problem Java Basics - Anfänger-Themen 6
M Filtern von Dateinamen Java Basics - Anfänger-Themen 7
G Zahlen aus String filtern? Java Basics - Anfänger-Themen 3
G Filtern von nicht-darstellbaren Zeichen Java Basics - Anfänger-Themen 3
M ordner überwachen und dateien filtern Java Basics - Anfänger-Themen 3
G String "filtern" Java Basics - Anfänger-Themen 2
S Liste oder Array filtern Java Basics - Anfänger-Themen 2
N Textdatei einlesen, Filtern und Splitten Java Basics - Anfänger-Themen 4
J Mailadresse aus String filtern Java Basics - Anfänger-Themen 2
C Dateinamen Filtern Java Basics - Anfänger-Themen 10
M Kann man im Filter nach mehreren Strings filtern lassen Java Basics - Anfänger-Themen 11
M Dateien aus Verzeichnis filtern, aber nicht nach Endung Java Basics - Anfänger-Themen 59
G Filtern einer 3stelligen Zahl Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben