我正在尝试使用JSoup(1.13.1(从HTML页面中的配方中获取脚本标记(JSON数据(中的内容。我不会发布HTML代码,但脚本标记内容相当大。
每当我尝试打印内容时,我都会得到一个空字符串。我尝试使用不同的方法获取数据:选择IDdoc.select("#__NEXT_DATA__")
,或使用doc.select("script[type='application/json']")
如果我尝试遍历所有的脚本标记,那么每当它到达我想要的脚本标记时,它都会打印为空白。我还尝试使用text()
方法和toString()
方法打印内容,但都不起作用。我甚至看到有人说你可以设置maxBodySize(0)
,但它仍然不起作用。
这是我的代码:
String url = "https://www.marmiton.org/recettes/recette_gateau-au-chocolat-fondant-rapide_166352.aspx";
doc = Jsoup.connect(url).maxBodySize(0).get();
Elements newsHeadlines = doc.select("#__NEXT_DATA__");
for (Element element : newsHeadlines) {
System.out.println(element);
}
将脚本元素视为数据:
Elements newsHeadlines = doc.select("#__NEXT_DATA__");
for (Element element : newsHeadlines) {
System.out.println(element.data());
}
请注意,一些控制台可能会在显示长度为81206个字符的行时出现问题(eclipse对我来说是这样做的((或者数据中有一些内容(,所以这段代码只是打印出开头。。。
for (Element element : newsHeadlines) {
System.out.println(element.data().length());
int printLen = Math.min(100, element.data().length());
System.out.println(element.data().substring(0,printLen));
}
并生产:
81206
{"props":{"pageProps":{"recipeData":{"recipe":{"id":166352,"guid":"7bf48b95-4cd2-4b32-8f41-fb6168510
请注意,如果您可以在环境中使用调试器,则会显示该元素一直具有结果,但作为类型为DataNode
的element
的childNode
,这是第一条线索。
对于这种情况,您可能想要尝试另一种API,例如Selenium。
J汤的text((返回在浏览器中呈现的文本。"script"标记根本不会呈现(除非您使用CSS技巧!(,所以它返回一个空字符串。至少我认为Jsoup的开发人员是这么想的。相反,您可以使用html((方法,该方法返回某种"原始"文本,IOW脚本元素内的文本。