大家好,我在 IntelliJ 上的 java web 應用程式中使用 jsoup。我正在嘗試從船舶跟蹤網站抓取港口停靠事件的資料并將資料存盤在 mySQL 資料庫中。
事件的資料組織在類名為table-group的 div 中,值在另一個類名為table-row的 div 中。
我的問題是所有容器的 div 行都是相同的類名,我試圖遍歷每一行并將資料推送到資料庫。到目前為止,我已經設法創建了一個 java 類來抓取第一行。
我如何遍歷每一行并將這些值存盤到我的資料庫中。我應該創建一個陣列串列來存盤值嗎?
這是我的刮板課
public class Scarper {
private static Document doc;
public static void main(String[] args) {
final String url =
"https://www.myshiptracking.com/ports-arrivals-departures/?mmsi=&pid=277&type=0&time=&pp=20";
try {
doc = Jsoup.connect(url).get();
} catch (IOException e) {
e.printStackTrace();
}
Events();
}
public static void Events() {
Elements elm = doc.select("div.table-group:nth-of-type(2) > .table-row");
List<String> arrayList = new ArrayList();
for (Element ele : elm) {
String event = ele.select("div.col:nth-of-type(2)").text();
String time = ele.select("div.col:nth-of-type(3)").text();
String port = ele.select("div.col:nth-of-type(4)").text();
String vessel = ele.select(".td_vesseltype.col").text();
Event ev = new Event();
System.out.println(event);
System.out.println(time);
System.out.println(port);
System.out.println(vessel);
}
}
}
我要抓取的 div 類的示例
<div style="box-sizing: border-box;padding: 0px 10px 10px 10px;">
<div class="cs-table">
<div class="heading">
<div class="col" style="width: 10px"></div>
<div class="col" style="width: 110px">Event</div>
<div class="col" style="width: 120px">Time (<span class="tooltip" title="My Time: In your current TimeZone">MT</span>)</div>
<div class="col" style="width: 150px">Port</div>
<div class="col">Vessel</div>
</div>
<div class="table-group">
<div class="table-row">
<div class="col"><i class="fa fa-sign-out red"></i></div>
<div class="col">Departure</div>
<div class="col" style="text-align: center;">2022-02-14 <b>16:51</b></div>
<div class="col"><img class="flag_line tooltip" src="/icons/flags2/16/GB.png" title=" United Kingdom"/><a href="/ports/port-of-belfast-in-gb-united-kingdom-id-101">BELFAST</a></div>
<div class="col td_vesseltype"><img src="/icons/icon7_511.png"><span class="padding_18"><a href="/vessels/wilson-blyth-mmsi-314544000-imo-9124419">WILSON BLYTH</a> [GB]</span></div>
</div>
</div>
<div class="table-group">
<div class="table-row">
<div class="col"><i class="fa fa-flag-checkered green"></i></div>
<div class="col">Arrival</div>
<div class="col" style="text-align: center;">2022-02-14 <b>16:51</b></div>
<div class="col"><img class="flag_line tooltip" src="/icons/flags2/16/GB.png" title=" United Kingdom"/><a href="/ports/port-of-hunters-quay-in-gb-united-kingdom-id-218">HUNTERS QUAY</a></div>
<div class="col td_vesseltype"><img src="/icons/icon6_511.png"><span class="padding_18"><a href="/vessels/sound-of-soay-mmsi-235101063-imo-9665229">SOUND OF SOAY</a> [GB]</span></div>
</div>
</div>
<div class="table-group">
<div class="table-row">
<div class="col"><i class="fa fa-sign-out red"></i></div>
<div class="col">Departure</div>
<div class="col" style="text-align: center;">2022-02-14 <b>16:51</b></div>
<div class="col"><img class="flag_line tooltip" src="/icons/flags2/16/GB.png" title=" United Kingdom"/><a href="/ports/port-of-largs-in-gb-united-kingdom-id-1602">LARGS</a></div>
<div class="col td_vesseltype"><img src="/icons/icon6_511.png"><span class="padding_18"><a href="/vessels/loch-shira-mmsi-235053239-imo-9376919">LOCH SHIRA</a> [GB]</span></div>
</div>
</div>
<div class="table-group">
<div class="table-row">
<div class="col"><i class="fa fa-sign-out red"></i></div>
<div class="col">Departure</div>
<div class="col" style="text-align: center;">2022-02-14 <b>16:51</b></div>
<div class="col"><img class="flag_line tooltip" src="/icons/flags2/16/GB.png" title=" United Kingdom"/><a href="/ports/port-of-ryde-in-gb-united-kingdom-id-1629">RYDE</a></div>
<div class="col td_vesseltype"><img src="/icons/icon4_511.png"><span class="padding_18"><a href="/vessels/island-flyer-mmsi-235117772-imo-9737797">ISLAND FLYER</a> [GB]</span></div>
</div>
</div>
uj5u.com熱心網友回復:
您可以從回圈遍歷表格的行開始:表格的選擇器是.cs-table這樣您就可以使用Element table = doc.select(".cs-table").first();. 接下來,您可以使用選擇器獲取表格的行div.table-row-Elements rows = doc.select("div.table-row");現在您可以遍歷所有行并從每一行中提取資料。代碼應如下所示:
Element table = doc.select(".cs-table").first();
Elements rows = doc.select("div.table-row");
for (Element row : rows) {
String event = row.select("div.col:nth-of-type(2)").text();
String time = row.select("div.col:nth-of-type(3)").text();
String port = row.select("div.col:nth-of-type(4)").text();
String vessel = row.select(".td_vesseltype.col").text();
System.out.println(event "-" time " " port " " vessel);
System.out.println("---------------------------");
// Do stuff with data here
}
現在由您決定是否要將資料保留在回圈內的某個陣列/串列中并稍后使用,或者直接將其插入資料庫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426948.html
下一篇:易趣類更改問題
