- Transform stronę internetową, którą próbujesz się na złom XHTML dokumentu. Jest kilka opcji, aby to zrobić z Javą, takimi jak JTidy i HTMLCleaner . Te narzędzia automatycznie naprawią zniekształcony kod HTML (np. Zamknij niezamknięte znaczniki). Oba działają bardzo dobrze, ale ja wolę JTidy, ponieważ lepiej integruje się z DOM API Javy;
- Wymagane informacje za pomocą wyrażeń XPath.
Oto przykład działający przy użyciu JTidy i podanej strony internetowej, używany do wyodrębnienia wszystkich nazw plików z tabeli.
public static void main(String[] args) throws Exception {
// Create a new JTidy instance and set options
Tidy tidy = new Tidy();
tidy.setXHTML(true);
// Parse an HTML page into a DOM document
URL url = new URL("http://www.cs.grinnell.edu/~walker/fluency-book/labs/sample-table.html");
Document doc = tidy.parseDOM(url.openStream(), System.out);
// Use XPath to obtain whatever you want from the (X)HTML
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("//td[@valign = 'top']/a/text()");
NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
List<String> filenames = new ArrayList<String>();
for (int i = 0; i < nodes.getLength(); i++) {
filenames.add(nodes.item(i).getNodeValue());
}
System.out.println(filenames);
}
Wynik będzie zgodny z oczekiwaniami [Integer Processing:, Image Processing:, A Photo Album:, Run-time Experiments:, More Run-time Experiments:]
.
Kolejnym fajnym narzędziem, które można użyć, jest Web Harvest
. Zasadniczo robi to wszystko, co zrobiłem powyżej, ale używając pliku XML do skonfigurowania potoku wyciągu.
Spojrzałem na dokumenty jSoup i wygląda całkiem nieźle. Szukałem czegoś na linii BeautifulSoup for Python i oto jest! –