как извлечь данные, используя jtidy и xpath - PullRequest
0 голосов
/ 13 августа 2011

я должен извлечь название компании d и номинальную стоимость из http://money.rediff.com/companies/20-microns-ltd/15110088

я заметил, что эту задачу можно выполнить с помощью xpath api. так как это HTML-страница, я использую jtidy парсер.

это xpath для номинала, который я должен извлечь.

/html/body/div[4]/div[6]/div[9]/div/table/tbody/tr[4]/td[2]

Это мой код

URL oracle = new URL("http://money.rediff.com/companies/20-microns-ltd/15110088");
URLConnection yc = oracle.openConnection();
InputStream is = yc.getInputStream();
is = oracle.openStream();
Tidy tidy = new Tidy();
tidy.setQuiet(true);
tidy.setShowWarnings(false);
Document tidyDOM = tidy.parseDOM(is, null);
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
String expression = "/html";
XPathExpression xPathExpression = xPath.compile(expression);
Object result = xPathExpression.evaluate(tidyDOM,XPathConstants.NODESET);
System.out.println(result.toString());

, пожалуйста, ведите меня дальше, потому что я не могу найти правильное решение для вышеупомянутого

1 Ответ

3 голосов
/ 13 августа 2011

Старайтесь не использовать "полные" xpaths.

//div[@id='leftcontainer']//div[9]//table//tr[4]/td[2]

лучше

/html/body/.../.../.../.../.../...

Большинство HTML-страниц недействительны или даже не имеют правильной формы. Таким образом, структура DOM может измениться при обработке «реальными HTML-парсерами». Например, <tbody> может быть вставлено в <table>, если его нет. Хуже, когда разные HTML-парсеры генерируют разные DOM-деревья, поэтому один XPath может быть действительным для одного парсера, но не для другого. Я бы предпочел использовать «подстановочные знаки», такие как table//tr[4] вместо table/tbody/tr[4] или table/tr[4], чтобы я мог забыть о <tbody>. Такие выражения более надежны, когда используются против грязных реальных HTML-страниц.

Вы можете использовать Firepath, плагин для Firebug, который затем является плагином для Firefox, для отладки выражений XPath.

p.s. Вы можете попробовать мой проект JHQL (http://github.com/wks/jhql)) именно для этой задачи. Вам понравится, если у вас будет больше страниц для извлечения данных.

...