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"));
}
}
这个想法是:
- 找到包含完整文章的最外层容器
- 提取标题和摘要
- 遍历文章的图像 (
figure
) 和段落 (p
) 元素 - 顺序将自动保留
我目前正在使用 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"));
}
}
这个想法是:
- 找到包含完整文章的最外层容器
- 提取标题和摘要
- 遍历文章的图像 (
figure
) 和段落 (p
) 元素 - 顺序将自动保留