- Преобразование веб-страницы, которую вы пытаетесь скопировать, в документ XHTML . Есть несколько вариантов сделать это с Java, например JTidy и HTMLCleaner . Эти инструменты также автоматически исправляют некорректный HTML (например, закрывают закрытые теги). Оба работают очень хорошо, но я предпочитаю JTidy, потому что он лучше интегрируется с Java DOM API;
- Извлечение необходимой информации с использованием выражений XPath .
Вот рабочий пример использования JTidy и предоставленной вами веб-страницы, используемой для извлечения всех имен файлов из таблицы.
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);
}
Результат будет [Integer Processing:, Image Processing:, A Photo Album:, Run-time Experiments:, More Run-time Experiments:]
, как и ожидалось.
Еще один крутой инструмент, который вы можете использовать: Web Harvest
. Он в основном делает все, что я делал выше, но использует файл XML для настройки конвейера извлечения.