Как я могу разобрать определенную информацию из исходного кода HTML, используя Java - PullRequest
1 голос
/ 18 апреля 2011

Я знаю, что для моего вопроса есть много тем, но я не смог найти полезного решения для моего ответа.Я мог бы подключиться к веб-сайту и читать построчно на Java, теперь вот моя проблема.Я хочу проанализировать конкретную информацию со страницы HTML.Эта страница содержит 5-дневный прогноз погоды.например, дата тега прогноза выглядит следующим образом:

//date of forecast
< th id="ctl00_mpBody_thmGun1" class="arkaTrh">19 April< /th >

//Min weather:
< td id="ctl00_mpBody_thmMin1" class="minS">8< /td>

//Max weather
 < td id="ctl00_mpBody_thmMax1" class="maxS">17< /td>

second day and others tags continue like this,
< th id="ctl00_mpBody_thmGun2" class="arkaTrh">20 April< /th >
.
.
.

в соответствии с этими тегами, мне нужно проанализировать 19 апреля, 17 и 8.

Ответы [ 3 ]

4 голосов
/ 19 апреля 2011

ДЛЯ ЛЮБВИ БОГА НЕ ИСПОЛЬЗУЙТЕ РЕКС.Я не знаю, сколько раз это нужно повторить на SO.Вы окажетесь в мире боли.Используйте синтаксический анализатор, в Java есть множество доступных загрузок.Вот некоторые из них:

Jericho

Dom4j

htmlparser

Но есть еще десятки.Просто Google "html parser java" или "java dom parser" или что-то еще.Пожалуйста.

1 голос
/ 19 апреля 2011

Вы можете создать некоторое регулярное выражение, как это:

id="ctl00_mpBody_thmGun1"[^>]*?>(.*?)<

Но если вы хотите более надежное решение, было бы лучше санировать HTML и выбирать данные с помощью XPath: http://www.ibm.com/developerworks/library/x-javaxpathapi.html

0 голосов
/ 18 апреля 2011

Вы можете использовать HtmlUnit .Он был разработан для модульного тестирования веб-страниц, но вы можете использовать его для анализа HTML-кода.Вы можете получить данные прогноза, используя что-то вроде этого:

final WebClient webClient = new WebClient();
final HtmlPage page = webClient.getPage("http://url.to.your.data");

//get temperatures
HtmlTableDataCell minTemp = page.getByXPath("//td[@class='minS']").get(0);
HtmlTableDataCell maxTemp = page.getByXPath("//td[@class='maxS']").get(0);
HtmlTableHeaderCell date = page.getByXPath("//th[@class='arkaTrh']").get(0);

System.out.println("Forecast for " + date.asText() + " - Min: " + minTemp.asText() + ", Max: " + maxTemp.asText()); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...