我正在尝试使用以下代码获取维基百科文章的第一段:
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上的线程中找到的所有方法中最简单的方法。
我该如何正确使用它?
我正在寻找一个通用的解决方案......谢谢。
这实际上取决于页面的内容。
例如,您提供了一篇 Wikipedia 文章,发现第一段(即 - with <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";
}
}
通过查看源代码,您可以注意到坐标出现在 a 中<p> tag
(这就是您得到这个结果的原因),并且在该标签内,还有另一个<span> tag
id 名称为“坐标”的。由于您想从结果中删除坐标,因此您只能使用它jsoup pseudo selectors
来获取所需的内容。
由于很难用一般的方式回答这类问题,因此,从上面列出的原因出发,我想补充一些技巧以进一步使用:
CSS Query
in后检查元素列表jsoup
。您可以通过代码或通过检查try-jsoup 站点上的查询来完成。您可以输入查询并查看元素列表。这样你可能会意识到结果不是你所期望的。有时它不会像在这种情况下那么容易,您可能会使用元素列表来更改您的代码(例如,在您的代码中使用Element firstParagraph = paragraphs.get(1);
而不是使用Element firstParagraph = paragraphs.first();
)。然后,您可以测试您的新改进CSS Query
,看看它是否适合您。jsoup
。希望能有所帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句