【发布时间】:2019-09-15 17:42:23
【问题描述】:
基本上,我正在尝试从 API 获取字符串,而此 API 只是一个空白页,其中一行包含所需的所有信息,我只是想获取其中的一部分。 这部分是每个人的 ID - 具有相同数量的字符。 API 对每个人都有这一行: {"id":"anExampleUniqueWhichHas32Charact","name": "玩家"} 我有点改变了代码,所以你会明白,因为我正在使用一个专门用于此的库,但我只是想让网络抓取正确。
所以我尝试做的是 Web Scrape 并获取该数量的 string.length。
但它不起作用。
我知道我也可以将 Regex 用于模式,但我真的不知道如何使用它。在这种情况下,Regex 老实说会更有帮助。
public void checkAPI() throws IOException {
String person = userInput.nextLine(); // It's just any name.
URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" +
person);
URLConnection con = url.openConnection();
InputStream isr =con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(isr));
String line;
while ((line = br.readLine()) != null) {
if (line.length() == 32) {
System.out.println(line);
}
}
}
我目前只是希望该行能够打印,稍后当它工作时我会将它用于其他东西。 没有抛出任何错误。
【问题讨论】:
-
网站只有一行,为什么还要检查行长?无论如何打印该行。从那里调试。如果您需要更多帮助,则需要包括您收到的价值、您想要的价值,以及第一个与第二个有何不同的一些解释。
-
请edit 您的问题包含minimal reproducible example,提供一个好的 答案几乎是不可能的,因为您的问题目前正在编写。
API的值是多少?person的值是多少?是否有任何异常被抛出?如果有,有哪些?你为什么要检查line.length() == 32?为什么不输出每一行?更好的是,为什么不使用调试器并在代码执行时检查变量的值? -
@JonnyHenly 我改了,希望你能理解得更好。我正在检查 line.length() == 32 以获得那个“id”
-
来自 Mojang 的 API 的响应被格式化为 json,所以我建议将响应简单地转换为 Json 对象(有很多库:简单的 json、gson、org.json)。使用 json 对象,您可以轻松获取单独的变量,如 id、名称或错误消息
-
我查看了您正在阅读的webpage 的来源。只有一行有两个键值对,去掉对行长的检查并输出该行。
标签: java url web-scraping