![](/img/trans.png)
[英]How to extract body contents from html file with more than one html tags with jsoup
[英]How to extract contents of <tr> tags from html document using 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 km<sup>2</sup></td>
</tr>
我尝试提取:链接到国旗,国家名称,Captiol和人口,但是首先我需要在Vector
分别插入每个表行,因此我需要提取每个<tr>content</tr>
。
问题:如何提取html文档中每个<tr>
的内容? 我根本没有比赛:
try {
BufferedReader br = new BufferedReader(new FileReader("./data/countries.txt"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line + '\n');
}
br.close();
ArrayList<String> tableRows = new ArrayList<String>();
Pattern p = Pattern.compile(" <tr>(\\w+)</tr> ", Pattern.MULTILINE);
Matcher m = p.matcher(sb);
while (m.find()) {
System.out.println("match");//it never prints thus there are no matches
tableRows.add(m.group());
}
System.out.println(tableRows.size());//THE SIZE is 0
for (String tr : tableRows) {
System.out.println(tr);
}
} catch (Exception e) {
e.printStackTrace();
}
有很多简单的方法可以从HTML文件提取数据,特别是:
正则表达式也可以工作,但是比前面提到的技术更容易出错。
++ 编辑 ++
我必须承认,XPath对我来说是一个很新的东西,因此以下代码不是最优化的,但是它将使您快速了解它的工作方式。 您可以在浏览器的控制台中练习使用XPath。 打开HTML页面,并用$x(EXPRESSION);
包装$x(EXPRESSION);
。
$x("//tr/td[@class='td-flag']/a/@href")
将呈现: Array [ href="/afghanistan" ]
如果您以前从未使用过jQuery,也可以在浏览器的控制台中使用它。 这几乎是一个JavaScript库,其唯一目的是简化代码。
$(".td-flag a").href
将呈现"file:///afghanistan"
我在上面仅使用了一个tr元素使用了您的代码段,但是显然您有更多tr元素,因此上面的表达式返回了数组。 另外,在您的表格元素上放置一个ID标记,以便轻松,安全地访问;-)
除了JQuery答案,还有JSoup ,它允许您使用Java进行JQuery-Style查询:
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.
}
如果这类数据在线,那意味着您的文档在线,我建议您甚至可以使用import.io之类的工具来创建针对您的用例的API。
响应为JSON格式,并且使用jQuery很容易使用。
当我不得不在Web上处理表格数据时,我更喜欢使用import.io,然后根据DOM元素创建某种解析器。
您始终可以使用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格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.