package com.dengqn.app.lingyinapi.html; import com.dengqn.app.lingyinapi.beans.SeedListItem; import lombok.extern.slf4j.Slf4j; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * * @author dengqn * @since 2025/9/25 18:28 */ @Slf4j public class HtmlTool { public static List getSeedListItem(Document doc) { Element torrents; try { torrents = doc.getElementsByClass("torrents").getFirst(); } catch (Exception e) { log.info("搜不到东西:{}", e.getMessage()); return new ArrayList<>(); } return torrents.select("tr").parallelStream().skip(1) .map(tr -> { try { /** * 标题部分 */ Element torrentNames = tr.getElementsByTag("table").first(); if (torrentNames == null) { return null; } Elements seedNames = torrentNames.getElementsByTag("td"); String seedCover = seedNames.get(0).getElementsByTag("img").first().attr("data-src"); String seedName = seedNames.get(1).getElementsByTag("a").first().attr("title"); String seedUrl = seedNames.get(1).getElementsByTag("a").first().attr("href"); String seedDesc = seedNames.text().replaceFirst(seedName, ""); boolean isFree = seedNames.get(1).getElementsByClass("pro_free").size() > 0; boolean isHitAndRun = seedNames.get(1).getElementsByClass("hitandrun").size() > 0; String downloadUrl = seedNames.get(3).getElementsByTag("a").first().attr("href"); /** * 数据 */ Elements tds = tr.selectXpath("td"); // skip 3 // 时间(title属性) String time = tds.get(3).getElementsByTag("span").first().attr("title"); String size = tds.get(4).text().trim(); String seeders = tds.get(5).getElementsByTag("b").first().text().trim(); String views = tds.get(7).getElementsByTag("b") == null || tds.get(7).getElementsByTag("b").size() == 0 ? "0" : tds.get(7).getElementsByTag("b").first().text().trim(); boolean isAnonymous = tds.get(8).text().trim().contains("匿名"); return new SeedListItem(seedCover, seedName, seedUrl, seedDesc, isFree, isHitAndRun, downloadUrl, time, size, seeders, views, isAnonymous); } catch (Exception e) { log.error("解析报错跳过:" + e.getMessage()); return null; } }).filter(Objects::nonNull).toList(); } public static Integer getPageTotal(Document document) { Elements paginationEl = document.getElementsByClass("nexus-pagination"); if (paginationEl == null) return 0; Elements pages = paginationEl.first().getElementsByTag("a"); if (pages == null || pages.size() == 0) return 0; Element lastA = pages.last(); String text = lastA.text(); if ("".equalsIgnoreCase(text.trim())) return 0; return Integer.valueOf(text.trim() .replaceAll("\"", "") .replaceAll(" ", "") .split("-")[1]); } }