【问题标题】:Java JSoup: article extraction with image links and paragraphJava JSoup:带有图片链接和段落的文章提取
【发布时间】:2021-08-14 04:25:05
【问题描述】:

我目前正在使用 Jsoup 和 Java 制作文章内容提取应用程序。我的问题是当我抓取文章时,Jsoup 倾向于返回元素列表而不是保留文章的顺序。例如,在具有多于 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("");
}

【问题讨论】:

  • 您能否提供一个您想要抓取的示例 html 页面和所需的输出?
  • 这是一篇有视频和一些文字的文章:vnexpress.net/cuoc-hop-bao-dau-tien-cua-taliban-4342403.html,这是一篇只有文字和图片的文章:vnexpress.net/…
  • 我尝试对其进行设计,使其能够删除文章主要内容中的任何内容
  • 什么是"sapo"
  • sapo 可以看作是对那篇文章的描述,用来吸引读者点击那篇文章

标签: java web-scraping jsoup


【解决方案1】:

如果您想从 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) 元素 - 将自动保留顺序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2018-09-17
    • 1970-01-01
    相关资源
    最近更新 更多