我有一份文件,其中包含有关每个国家/地区的数据。每个表格行都是一个国家:
<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 km<sup>2</sup></td>
</tr>
我尝试提取:链接到标志,国家名称,captiol和人口,但首先我需要分别在Vector
中插入每个表行,所以我需要提取每个{{1的内容}}
问题:如何在html文档中提取每个<tr>content</tr>
的内容?我根本没有比赛:
<tr>
答案 0 :(得分:2)
有很多简单的方法可以从HTML文件中提取数据,特别是:
正则表达式也有效,但比上述技术更容易出错。
++ 编辑 ++
我必须承认,XPath对我来说是一个新手,所以下面的代码并不是最优化的,但它会让你快速了解它是如何工作的。您可以在浏览器的控制台中练习使用XPath。打开HTML页面并使用$x(EXPRESSION);
包装表达式。
$x("//tr/td[@class='td-flag']/a/@href")
将呈现:Array [ href="/afghanistan" ]
如果您以前从未使用过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格式。