如何使用Java解析来自html源代码的特定信息

时间:2011-04-18 18:34:18

标签: java html regex parsing web-scraping

我知道我的问题有很多主题,但我无法找到有用的解决方案。我可以连接到网站并在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 >
.
.
.

根据这些标签,我需要解析4月19日,17日和8日。

3 个答案:

答案 0 :(得分:4)

为了上帝的爱,不要使用注意力。我不知道在SO上要重复多少次。你将陷入痛苦的世界。使用解析器,java中有可用的加载。以下是其中一些:

Jericho

Dom4j

htmlparser

但还有几十个。只是Google“html parser java”或“java dom parser”之类的东西。请。

答案 1 :(得分:1)

你可以像这样制作一些正则表达式:

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

但是如果你想要一个更强大的解决方案,那么最好清理HTML并使用XPath选择数据: http://www.ibm.com/developerworks/library/x-javaxpathapi.html

答案 2 :(得分:0)

您可以使用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());