我试图使用此代码获取维基百科文章的第一段:
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上的线程中找到的所有方法的最简单方法。
如何正确使用?
我正在寻找一般解决方案......
感谢。
答案 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
来获取所需的内容。
由于很难以一般方式回答这些问题,从上面列出的原因,我想补充一些提示,以便进一步使用:
<span> tag
中执行CSS Query
后检查您的元素列表。您可以通过代码或查看try-jsoup site上的查询来执行此操作。您可以输入your query并查看元素列表。这样你就会意识到结果并不是你所期望的。有时它不会像在这种情况下那么容易,您可以使用元素列表来更改代码(例如,使用jsoup
而不是在代码中使用Element firstParagraph = paragraphs.get(1);
)。然后,您可以测试your newly improved CSS Query
,看看它是否适合您。Element firstParagraph = paragraphs.first();
必须提供的不同选择器是有帮助的
这将使您的工作更轻松。希望有所帮助!