如何使用正则表达式从html文档中提取标签的内容?

时间:2015-10-02 12:43:19

标签: java html regex

我有一份文件,其中包含有关每个国家/地区的数据。每个表格行都是一个国家:

<tr>
    <td class="td-flag"><a href="/afghanistan"><img alt="Flag of Afghanistan"  src="//flags.fmcdn.net/data/flags/mini/af.png" width="30" height="20" /></a></td>
    <td class="td-country"><a href="/afghanistan">Afghanistan</a></td>
    <td class="td-capital">Kabul</td>
    <td class="td-population">25,500,100</td>
    <td class="td-area">652,090&nbsp;km<sup>2</sup></td>
</tr>

我尝试提取:链接到标志,国家名称,captiol和人口,但首先我需要分别在Vector中插入每个表行,所以我需要提取每个{{1的内容}}

问题:如何在html文档中提取每个<tr>content</tr>的内容?我根本没有比赛:

<tr>

3 个答案:

答案 0 :(得分:2)

有很多简单的方法可以从HTML文件中提取数据,特别是:

正则表达式也有效,但比上述技术更容易出错。

++ 编辑 ++

  • XPath示例

我必须承认,XPath对我来说是一个新手,所以下面的代码并不是最优化的,但它会让你快速了解它是如何工作的。您可以在浏览器的控制台中练习使用XPath。打开HTML页面并使用$x(EXPRESSION);包装表达式。

$x("//tr/td[@class='td-flag']/a/@href")将呈现:Array [ href="/afghanistan" ]

  • jQuery示例

如果您以前从未使用过jQuery,也可以在浏览器的控制台中使用它。它几乎是一个JavaScript库,其唯一目的是简化代码。

$(".td-flag a").href将呈现"file:///afghanistan"

我使用上面的代码片段只有一个tr元素,但显然你有更多的tr元素,所以上面的表达式返回数组。此外,在表格元素上放置一个ID标签,以便于安全访问; - )

答案 1 :(得分:2)

添加到JQuery答案,还有JSoup,它允许您在Java中执行JQuery样式查询:

Document doc = Jsoup.connect("<your url here>").get();
Elements rows = doc.select("tr");
for(Element row : rows){
    String country = row.getElementByClass("td-country").text();
    // etc.
}

答案 2 :(得分:0)

如果这类数据在线,我的意思是如果您的文档在线,我建议您甚至可以使用import.io等工具来创建特定于您的用例的API。

响应采用JSON格式,使用jQuery非常容易使用。

当我必须使用网络上的表格数据,然后根据DOM元素创建某种解析器时,我更喜欢使用import.io。

您总是可以使用jQuery并以JSON格式保存所有数据,您需要创建一个javascript解析器,因此它会从文档的其余部分解析数据,然后添加此信息,您将收集的此信息作为收集JSON所以你可以在任何地方使用它。

// defining variables
var flag = $('td.td-flag img').prop('src');
var country = $('td.td-country a').html();
var capital = $('td.td-capital').html();
var population = $('td.td-population').html();
var area = $('td.td-area').html();

现在这只是解析器的一部分,它只提取一行数据的数据,如果你有多行数据,你将需要运行一个循环遍历所有表元素的foreach(每个在javascript中)循环并将它们全部读取(使用上面定义的变量)...最后将它们作为数组或导出为JSON格式。