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

Getting the first paragraph of Wikipedia's article using Jsoup

我正在尝试使用以下代码获取维基百科文章的第一段:

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";}
}

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

我没听懂第一段,我只听懂了这一部分:

但是我想得到这部分:

如何正确使用?
我正在寻找一个通用的解决方案...... 谢谢

这真的取决于页面的内容。
例如,您给出了一篇维基百科文章,发现第一段(即 - <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 中(这就是为什么您得到这个结果的原因)并且在该标签内,还有另一个 <span> tag ID 名称为 "coordinates"。由于您想从结果中删除坐标,因此您可以使用 jsoup pseudo selectors 来仅获取所需的内容。


由于这类问题很难笼统地回答,鉴于以上所列的原因,我想补充一些技巧以供进一步使用:

  1. 建议仔细看看源码 您正在处理的页面并检查所有标签。你就是这样 能够找到一些可能的问题(比如在这个问题中出现的问题)并在编写代码时考虑这些因素 提取页面的所需部分。
  2. jsoup 中执行 CSS Query 后检查元素列表。您可以通过代码或检查 try-jsoup site. You can enter your query and see the list of elements. That way you might realize that the result is not what you were expecting. Sometimes it wouldn't be as easy as it was in this case, and you might use the list of elements to change your code (say, for example, using Element firstParagraph = paragraphs.get(1); instead of using Element firstParagraph = paragraphs.first(); in your code). You can then test your newly improved CSS Query 上的查询来完成,看看是否适合您。
  3. 熟悉 jsoup 提供的不同选择器会很有帮助。
    这将使您的工作更轻松。

希望对您有所帮助!