diff --git a/src/main/java/cn/hezhaohui/fund/util/SoupUtil.java b/src/main/java/cn/hezhaohui/fund/util/SoupUtil.java index 16a26b7..3d42f36 100644 --- a/src/main/java/cn/hezhaohui/fund/util/SoupUtil.java +++ b/src/main/java/cn/hezhaohui/fund/util/SoupUtil.java @@ -6,6 +6,11 @@ import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @Component public class SoupUtil { @@ -13,9 +18,6 @@ public class SoupUtil { Document document = Jsoup.parse(content); Elements elements = document.getElementsByClass("ui-table-hover"); return elements; -// Element firstTable = elements.first(); -// Element secondTable = elements.size() >= 3 ? elements.get(2) : null; -// } public Element getHoldings(Elements elements) { @@ -26,4 +28,28 @@ public class SoupUtil { return elements.size() >= 3 ? elements.get(2) : null; } + public List> parseTable(Element table) { + Element tbody = table.select("tbody").getFirst(); + // 获取表头 + List headers = new ArrayList<>(); + Element headRow = tbody.select("tr").getFirst(); + Elements headElements = headRow.select("th"); + for (int i = 0; i < headElements.size() - 1; i++) { + headers.add(headElements.get(i).text()); + } + // 获取表数据 + List> data = new ArrayList<>(); + Elements bodyElements = tbody.select("tr"); + for (int i = 1; i < bodyElements.size(); i++) { + Elements tdElements = bodyElements.get(i).select("td"); + Map rowData = new HashMap<>(); + for (int j = 0; j < tdElements.size() - 1; j++) { + rowData.put(headers.get(j), tdElements.get(j).text()); + } + data.add(rowData); + } + + return data; + } + } diff --git a/src/test/java/cn/hezhaohui/fund/util/SoupUtilTest.java b/src/test/java/cn/hezhaohui/fund/util/SoupUtilTest.java index 71bee71..b0a5e8e 100644 --- a/src/test/java/cn/hezhaohui/fund/util/SoupUtilTest.java +++ b/src/test/java/cn/hezhaohui/fund/util/SoupUtilTest.java @@ -7,6 +7,9 @@ import org.jsoup.select.Elements; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import java.util.List; +import java.util.Map; + @SpringBootTest class SoupUtilTest { @@ -39,4 +42,17 @@ class SoupUtilTest { System.out.println(worth); Assert.notNull(worth); } + + @Test + void parseTable() { + Elements elements = soupUtil.parseContent(WebUtil.getContentByUrl(FundUtil.getUrlByFundId("001068"))); + Assert.notNull(elements); + + Element holdings = soupUtil.getHoldings(elements); + Assert.notNull(holdings); + + List> maps = soupUtil.parseTable(holdings); + Assert.notNull(maps); + System.out.println(maps); + } } \ No newline at end of file