Dead Links finden/URLs aus HTML-Dokument auslesen und überprüfen

socke2506

Grünschnabel
Hallo!
Ich habe ein Problem. Und zwar muss ich eine Homepage nehmen, diese mit JTidy in ein HTML-Dokument konvertieren, da die URLs auslesen und diese wieder überprüfen. Sind Dead Links dabei, sollen die mir angezeigt werden.
Ich bin schon soweit, dass mir das HTML-Dokument als Baum angezeigt wird, aber jetzt muss ich dem sagen, dass sobal ein KInder-Knoten = a (also nem Link) dann soll der sich die position speichern...ich brauche Hilfe bitte :(

Mein Code bisher:
public static void main(String args[]) throws Exception
{
Document doc = Konvertieren.TidyHtmlClient();
Element element = doc.getDocumentElement();
baumAuslesen(element);
}//main

public static void baumAuslesen(Node element)
{
NodeList childnodes = element.getChildNodes();

if (childnodes != null)
{
for(int zaehler = 0; zaehler < childnodes.getLength(); zaehler ++)
{
Node item = childnodes.item(zaehler);
if(childnodes.equals("a")) // ab hier klappts nicht
{
System.err.println(zaehler);
} //bis hier klappts nicht

System.out.println(item.getNodeName());
baumAuslesen(item);
}//for
}//if
}//baumauslesen

Danke schon mal im Voraus...
socke.
 
Zuletzt bearbeitet:
Für einfaches Checken von Links braucht's doch nur regular expressions:

Code:
public void testRegex() {
		String regex = "<a\\s+[^<>]*href=\"([^<>\"]*)\"[^<>]*>([\\s\\S]+?)</a>";
		Pattern pattern = Pattern.compile(regex);
		
		String test = "<a href=\"test\">TEST</a>";
		
		Matcher matcher = pattern.matcher(test);

		while (matcher.find()) {
		  // hier kannst du jetzt auf den link zugreifen:
		  // mit matcher.group(1) bekommst du die url
		  // mit matcher.group(2) bekommst du den link-text
		  System.out.println(matcher.group(1) + " (" + matcher.group(2) + ")");
		}
	}

Ausgabe:
Code:
test (TEST)

Mit dem obigen Code bekommst du sämtliche Links, die in einer HTML-Seite enthalten sind - und das ganz ohne JTidy, DOM oder anderen "Schwergewichten".
 
Hallo,

eine andere Möglichkeit wäre:
http://www.tutorials.de/forum/java/202949-alle-links-eines-html-dokuments-extrahieren.html

Beispielsweise so:
Java:
package de.tutorials;

import java.net.URL;

import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

public class LinkExtractor {
	public static void main(String[] args) throws Exception{
		HTMLEditorKit editorKit = new HTMLEditorKit();
		HTMLDocument htmlDoc = new HTMLDocument();
		htmlDoc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
		editorKit.read(new URL("http://www.tutorials.de").openStream(), htmlDoc, 0);
		for(HTMLDocument.Iterator iter = htmlDoc.getIterator(HTML.Tag.A);iter.isValid();iter.next()) {
			System.out.println(iter.getAttributes().getAttribute(HTML.Attribute.HREF));
		}
	}
}

Gruß Tom
 
Das Problem ist nur, dass ich das mit JTidy machen soll...
Ich muss auch "nur noch" den jeweiligen Link in textform ausgeben lassen...der Rest ist schon geschafft.
Danke auf jeden Fall schon mal für die Mithilfe.
Das Ganze sieht jetzt mittlerweile so aus:

Code:
public static void baumAuslesen(Node element)
	{
		NodeList childnodes = element.getChildNodes();
		
		
		 if (childnodes != null)
		 {
			for(int zaehler = 0; zaehler < childnodes.getLength(); zaehler ++)
			{
				Node item = childnodes.item(zaehler);
				if(item.getNodeName().equals("a"))
				{
					System.out.println("Link "+item.getNodeName()+" der Tiefe: "+ zaehler);
					NamedNodeMap nodemap = element.getAttributes();
					
					System.err.println(nodemap);
				}
				baumAuslesen(item);	 
			}//for
		 }//if
	}//baumauslesen
 

Neue Beiträge

Zurück