Java JSoup:使用图像链接和段落提取文章

Java JSoup: article extraction with image links and paragraph

我目前正在使用 Jsoup 和 Java 制作文章内容提取应用程序。我的问题是当我抓取文章时,Jsoup 倾向于 return 一个元素列表而不是保留文章的顺序。例如,在一篇有超过 1 张图片的普通文章中,它可以有这样的顺序:(标题,sapo,图片,段落,图片,段落,段落,图片,段落)。那么我怎样才能在不丢失其顺序的情况下抓取网站的主要内容(文本和图像链接)呢? 以下是我这样做的想法,但它不起作用。

int cur = 0;
Document doc = Jsoup.connect(url).get();
Elements elements = doc.select("div");
for (Element element : elements) {
    if (element.select("div[type=\"Photo\"] img").hasAttr("src")) {
        Elements temp = element.select("div[type=\"Photo\"] img");
        System.out.println(temp.get(cur).attr("src"));
        cur++;
    }
    System.out.println(element.select("p span").text());
    System.out.println("");
}

如果您想从您在 comment 中链接到的站点中提取文章数据,您可以这样做:

Document doc = Jsoup.connect(url).get();

// Full article
Elements elements = doc.select("div.sidebar-1");

System.out.println("## Article title:");
System.out.println(elements.select("h1.title-detail").text());

System.out.println("## Article summary:");
System.out.println(elements.select("p.description").text());

// Images and paragraphs
for (Element e : elements.select("article.fck_detail p,figure")) {
    if (e.is("p")) {
        System.out.println("## Paragraph");
        System.out.println(e.text());
    } else {
        System.out.println("## Image (image URL)");
        System.out.println(e.select("img[src]").attr("src"));
    }
}

这个想法是:

  1. 找到包含完整文章的最外层容器
  2. 提取标题和摘要
  3. 遍历文章的图像 (figure) 和段落 (p) 元素 - 顺序将自动保留