使用Jsoup获取维基百科文章的第一段

时间:2017-03-25 19:38:41

标签: java android jquery jsoup wikipedia

我试图使用此代码获取维基百科文章的第一段:

public String getText(){
    try{
        Document doc = Jsoup.connect("https://en.wikipedia.org/wiki/Israel").get();
        Elements paragraphs = doc.select("p");
        Element firstParagraph = paragraphs.first();
        return firstParagraph.text();
    }
    catch (IOException e){return "Failed";}
}

这是我在StackOverflow上的线程中找到的所有方法的最简单方法。

我没有得到第一段,我得到的只是这一部分: The part I get from jsoup

但我希望得到这一部分:first paragraph on Wikipedia

如何正确使用?
我正在寻找一般解决方案...... 感谢。

1 个答案:

答案 0 :(得分:0)

这实际上取决于页面的内容 例如,您提供了一篇维基百科文章,发现第一段(即 - <p> tag)是国家的坐标,而不是关于它的实际第一段。
这是因为用于描述国家的维基百科模板。

有很多模板 - 适用于国家,公司,个性等 每个主题作为具有不同轮廓的特定模板,因此很难为您提供帮助,并为您提供一个有助于您未来场景的一般答案。

具体参考您的问题,您可以排除坐标并获取页面上真正的第一段 你的代码应该是:

public String getText(){
    try{
        Document doc = Jsoup.connect("https://en.wikipedia.org/wiki/Israel").get();
        Elements paragraphs = doc.select("p:not(:has(#coordinates))");
        Element firstParagraph = paragraphs.first();
        return firstParagraph.text();
    }
    catch (IOException e) {
        return "Failed";
    }
}

通过查看源代码,您可以注意到坐标显示在<p> tag中(这就是为什么您得到此结果,开头)并且在该标记内部还有另一个{{1} id坐标为“coordinates”。由于您要从结果中删除坐标,因此您可以使用jsoup pseudo selectors来获取所需的内容。

由于很难以一般方式回答这些问题,从上面列出的原因,我想补充一些提示,以便进一步使用:

  1. 建议仔细查看源代码 您正在处理的页面并检查所有标签。那样你就是 能够找到一些可能的问题(比如在这个问题中出现的问题)并在编写代码时考虑这些因素 提取页面的所需部分。
  2. <span> tag中执行CSS Query后检查您的元素列表。您可以通过代码或查看try-jsoup site上的查询来执行此操作。您可以输入your query并查看元素列表。这样你就会意识到结果并不是你所期望的。有时它不会像在这种情况下那么容易,您可以使用元素列表来更改代码(例如,使用jsoup而不是在代码中使用Element firstParagraph = paragraphs.get(1); )。然后,您可以测试your newly improved CSS Query,看看它是否适合您。
  3. 熟悉Element firstParagraph = paragraphs.first();必须提供的不同选择器是有帮助的 这将使您的工作更轻松。
  4. 希望有所帮助!