我如何使用Jsoup分别从this website中为每一行提取规范数据,例如网络 - >网络类型,电池等。
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class mobilereviews {
public static void main(String[] args) throws Exception {
Document doc = Jsoup.connect("http://mobilereviews.net/details-for-Motorola%20L7.htm").get();
for (Element table : doc.select("table")) {
for (Element row : table.select("tr")) {
Elements tds = row.select("td");
System.out.println(tds.get(0).text());
}
}
}
}
答案 0 :(得分:5)
以下是尝试找到问题的解决方案
Document doc = Jsoup.connect("http://mobilereviews.net/details-for-Motorola%20L7.htm").get();
for (Element table : doc.select("table[id=phone_details]")) {
for (Element row : table.select("tr:gt(2)")) {
Elements tds = row.select("td:not([rowspan])");
System.out.println(tds.get(0).text() + "->" + tds.get(1).text());
}
}
解析HTML非常棘手,如果HTML发生变化,您的代码也需要更改。
您需要首先研究HTML标记以提出解析规则。
table[id=phone_details]
tr:gt(2)
td:not([rowspan])
有关选择器语法中更复杂的选项,请查看http://jsoup.org/cookbook/extracting-data/selector-syntax
答案 1 :(得分:2)
列的xpath - //*[@id="phone_details"]/tbody/tr[3]/td[2]/strong
值的xpath - //*[@id="phone_details"]/tbody/tr[3]/td[3]
@ Joey的代码尝试将这些内容归零。您应该能够根据Xpath编写select()
规则。
用适当的值替换数字(tr [N] / td [N])。
或者,您可以将HTML思想管道化为仅文本浏览器并从文本中提取数据。这是页面的text version。您可以分隔文本或在N个字符后读取以提取数据。
答案 2 :(得分:1)
这就是我从html表中获取数据的方式。
org.jsoup.nodes.Element tablaRegistros = doc
.getElementById("tableId");
for (org.jsoup.nodes.Element row : tablaRegistros.select("tr")) {
for (org.jsoup.nodes.Element column : row.select("td")) {
// Elements tds = row.select("td");
// cadena += tds.get(0).text() + "->" +
// tds.get(1).text()
// + " \n";
cadena += column.text() + ",";
}
cadena += "\n";
}
答案 3 :(得分:1)
以下是通过JSoup从HTML页面中提取表格的通用解决方案。
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class ExtractTableDataUsingJSoup {
public static void main(String[] args) {
extractTableUsingJsoup("http://mobilereviews.net/details-for-Motorola%20L7.htm","phone_details");
}
public static void extractTableUsingJsoup(String url, String tableId){
Document doc;
try {
// need http protocol
doc = Jsoup.connect(url).get();
//Set id of any table from any website and the below code will print the contents of the table.
//Set the extracted data in appropriate data structures and use them for further processing
Element table = doc.getElementById(tableId);
Elements tds = table.getElementsByTag("td");
//You can check for nesting of tds if such structure exists
for (Element td : tds) {
System.out.println("\n"+td.text());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}