我正在尝试使用以下代码获取维基百科文章的第一段:
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 上的线程中找到的所有方法中最简单的方法。
如何正确使用它?
我正在寻找一个通用的解决方案......
谢谢。
最佳答案
这实际上取决于页面的内容。
例如,您给出了一篇维基百科文章,并发现第一段(即 - 带有 <p> tag
)是国家/地区的坐标,而不是有关该国家/地区的实际第一段。
这是由于描述国家的维基百科模板。
有很多模板 - 适用于国家、公司、个人等。
每个主题都是具有不同大纲的特定模板,因此很难为您提供帮助并为您提供有助于您 future 场景的一般答案。
通过具体引用您的问题,您可以排除坐标并获得页面上真正的第一段。
您的代码应该是:
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 名称为“坐标”。由于您想从结果中删除坐标,您可以使用 jsoup pseudo selectors
仅获取所需内容。
由于这类问题很难笼统地回答,基于上面列出的原因,我想补充一些进一步使用的技巧:
- 建议仔细查看源代码 您正在处理的页面并检查所有标签。这样你就是 能够找到一些可能的问题(就像这个问题中出现的问题),并在编写代码时考虑这些因素 提取页面中需要的部分。
- 执行
CSS Query
后检查元素列表在jsoup
。您可以通过代码或通过检查 try-jsoup site 上的查询来完成此操作。 。您可以输入your query并查看元素列表。这样你可能会意识到结果不是你所期望的。有时它不会像本例中那样容易,您可能会使用元素列表来更改代码(例如,在代码中使用Element firstParagraph = paragraphs.get(1);
而不是使用Element firstParagraph = paragraphs.first();
)。然后您可以测试your newly improvedCSS Query
看看这是否适合您。 - 熟悉不同的选择器很有帮助
jsoup
必须提供。
这将使您的工作更加轻松。
希望有帮助!
关于java - 使用 Jsoup 获取维基百科文章的第一段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43021074/