Существует ли шаблон для извлечения структурированных данных со страницы HTML с использованием XPath? Я пытаюсь извлечь данные из одной или нескольких таблиц HTML на странице. XPath облегчает поиск таблиц, но я с трудом справляюсь, когда доберусь до этого.
В настоящее время я делаю следующее:
- Перебор таблиц (их может быть больше одной)
- Итерация строк в этой таблице
- Перебрать ячейки в этой строке
- (Затем, вероятно, поместите их в массив и проанализируйте содержимое)
Мой код выглядит примерно так:
var tables = mydoc.evaluate( "//table", mydoc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
table = tables.iterateNext();
while (table)
{
var rows = mydoc.evaluate("tbody/tr", table, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
row = rows.iterateNext();
while (row)
{
var tds = mydoc.evaluate("td", row, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null)
td = tds.iterateNext()
while(td)
{
// TODO: store content in an array to process later
print('*' + td.textContent);
td = tds.iterateNext();
}
row = rows.iterateNext();
}
table = iterator.iterateNext();
}
Это кажется немного неприятным, поскольку все примеры XPath, похоже, выполняют их обработку за один шаг. Похоже, есть несколько нетривиальных примеров, когда два типа данных (например, метки и значения в таблице) выбираются и объединяются. Я могу использовать следующие селекторы, но в итоге получаю два списка без структуры:
//table/tbody/tr/td[@class='label']
//table/tbody/tr/td/a[@class='value']
(я знаю, что использую XPath для парсинга HTML, для которого он на самом деле не был предназначен, но, похоже, он пока работает.)