我需要使用Jsoup帮助我的Java项目(如果你认为有更有效的方法来实现这个目的,请告诉我)。我的程序的目的是解析来自不同URL的某些有用信息并将其放在文本文件中。我不是HTML或JavaScript方面的专家,因此,我很难用Java编码我要解析的内容。 在您在下面的代码中看到的网站作为示例之一,我在Jsoup中解析的信息就是您在“路由”(路由,位置,船只/航程,集装箱到达日期,集装箱出发日期; = Origin,Seattle SSA Terminal T18,26 Jun 15 A,26 Jun 15 A ...依此类推)。 到目前为止,使用Jsoup,我们只能解析网站的标题,但我们没有成功获得任何身体。 这是我使用的代码,我从在线来源获得:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Jsouptest71115 {
public static void main(String[] args) throws Exception {
String url = "http://google.com/gentrack/trackingMain.do "
+ "?trackInput01=999061985";
Document document = Jsoup.connect(url).get();
String title = document.title();
System.out.println("title : " + title);
String body = document.select("body").text();
System.out.println("Body: " + body);
}
}
答案 0 :(得分:2)
工作代码:
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
public class Sample {
public static void main(String[] args) {
String url = "http://homeport8.apl.com/gentrack/blRoutingPopup.do";
try {
Connection.Response response = Jsoup.connect(url)
.data("blNbr", "999061985") // tracking number
.method(Connection.Method.POST)
.execute();
Element tableElement = response.parse().getElementsByTag("table")
.get(2).getElementsByTag("table")
.get(2);
Elements trElements = tableElement.getElementsByTag("tr");
ArrayList<ArrayList<String>> tableArrayList = new ArrayList<>();
for (Element trElement : trElements) {
ArrayList<String> columnList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
columnList.add(i, trElement.children().get(i).text());
}
tableArrayList.add(columnList);
}
System.out.println("Origin/Location: "
+tableArrayList.get(1).get(1));// row and column number
System.out.println("Discharge Port/Container Arrival Date: "
+tableArrayList.get(5).get(3));
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出:
产地/位置:西雅图SSA TERMINAL(T18),WA
卸货港/集装箱到货日期:19 Jul 15 E
答案 1 :(得分:0)
您需要利用document.select("body")
选择方法输入到CSS选择器。要了解有关CSS选择器的更多信息,只需谷歌或Read this。使用CSS选择器,您可以轻松识别网页主体的各个部分。
在您的特定情况下,您会遇到不同的问题,例如您所在的表位于IFrame
内,如果您查看网页的html,则表示您正在访问其(iframe的)网址是“ http://homeport8.apl.com/gentrack/blRoutingFrame.do“,因此如果您直接访问此URL以便访问其内容,您将获得一个例外,这可能是服务器的一些限制。要正确获取内容,您需要通过JSoup访问两个网址,1。http://homeport8.apl.com/gentrack/trackingMain.do?trackInput01=999061985和2. http://homeport8.apl.com/gentrack/blRoutingFrame.do?trackInput01=999061985
对于第一个网址,您将无法获得任何有用信息,但对于第二个网址,您将获得您感兴趣的表格。尝试使用document.select("table")
,它将为您提供表列表迭代器,并查找您感兴趣的表。获得表后,使用Element.select(“tr”)获取表行,然后为每个“tr”使用Element.select(“td”)获取表格单元格数据。
您正在访问的网页没有使用CSS类和ID选择器,这样可以更容易地使用jsoup阅读它,所以我担心迭代document.select("table")
是您最好和最简单的选择。
祝你好运。