Java 如何从以下URL获取一些数据?
我想从以下网址获取一些数据,如sunriseTime、outTemp、Outside湿度等。如果你知道我如何做到这一点,请帮助我 URLJava 如何从以下URL获取一些数据?,java,android,xml,Java,Android,Xml,我想从以下网址获取一些数据,如sunriseTime、outTemp、Outside湿度等。如果你知道我如何做到这一点,请帮助我 URL 您需要执行以下操作: 打开URL 阅读网页的内容 创建要在数据中找到的模式 使用Regex(正则表达式)来匹配数据中需要的模式 我已经编写了一个Java程序来实现上述功能。希望有帮助:) 导入java.io.BufferedReader; 导入java.io.InputStreamReader; 导入java.net.URL; 导入java.net.URL
您需要执行以下操作:
- 打开URL
- 阅读网页的内容
- 创建要在数据中找到的模式
- 使用Regex(正则表达式)来匹配数据中需要的模式
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.net.URL;
导入java.net.URLConnection;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
类URL读取器{
公共静态列表getAttributesFromURL(字符串urlString,
字符串[]键){
StringBuilder sb=新的StringBuilder();
试一试{
//打开URL
URL=新URL(URL字符串);
URLConnection URLConnection=url.openConnection();
BufferedReader BufferedReader=新的BufferedReader(
新的InputStreamReader(urlConnection.getInputStream());
//将URL内容读入StringBuilder对象
弦线;
而((line=bufferedReader.readLine())!=null){
sb.追加(第+行“\n”);
}
bufferedReader.close();
}捕获(例外e){
e、 printStackTrace();
}
//将StringBuilder内容复制到字符串中
字符串内容=sb.toString();
List keyList=Arrays.asList(键);
列表结果=新建ArrayList();
用于(字符串键:键列表){
//定义要在内容中找到的模式
字符串模式find=key+“=\”(.*)\”;
Pattern p=Pattern.compile(patternToFind);
匹配器m=p.Matcher(内容);
if(m.find()){
//如果找到模式,则将其存储在结果列表中
结果.添加(键+”:“+m.group(1.trim());
}
}
//返回结果
返回结果;
}
公共静态void main(字符串[]args)引发java.lang.Exception{
字符串URL字符串=”http://www.metar.gr/ws/alexan/ZWNTANA.htm";
//列出需要提取其值的所有键
字符串[]键={“日出时间”、“室外温度”、“室外湿度”};
//得到结果
List attributeValuePairs=getAttributesFromURL(URL字符串,键);
System.out.println(attributeValuePairs);
}
}
上述程序的输出将为:
[日出时间:6:14,室外温度:21.7,室外湿度:57]
您可以通过在程序的
键数组中指定属性名称来获取所需的其他属性的值。您研究过如何获取url后面的网站内容吗?是的,当然,但我无法从中找到数据,这就是我选择它的原因。如果您想查看该URL并给出一些解决方案,请执行以下操作:()这里也没有指向其他地方的链接。去那边,看看我想做什么,然后回来告诉我怎么做。请花一些时间阅读,特别是在这里发布下一个问题之前。祝你好运。我非常感谢你的回复,谢谢你。然而,因为我是这个网站的新手,更一般地说是编程领域的新手,我不知道你应该提到哪些问题,哪些不应该。另外,我不知道在特定情况下使用哪种代码,所以我用这种方式问我的问题。我使用了你的代码,它没有显示任何问题,但它不会向我返回任何信息。这是因为我刚刚将结果打印到控制台。如果您运行它,您可以在控制台上看到输出。你能告诉我你是从哪里运行这个程序的吗?在我用手机运行的Android Studio上,你检查控制台了吗?我可以更改程序以返回值的ArrayList。这会有帮助吗?我已更改程序以返回值的ArrayList。请立即运行并检查:)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class URLReader {
public static List<String> getAttributesFromURL(String urlString,
String [] keys) {
StringBuilder sb = new StringBuilder();
try {
//Opening the URL
URL url = new URL(urlString);
URLConnection urlConnection = url.openConnection();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream()));
// Reading the URL contents into a StringBuilder object
String line;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line + "\n");
}
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
// Copying the StringBuilder contents into a string
String contents = sb.toString();
List<String> keyList = Arrays.asList(keys);
List<String> result = new ArrayList<String>();
for (String key : keyList) {
// Defining the pattern to be found in contents
String patternToFind = key + "=\"(.*)\"";
Pattern p = Pattern.compile(patternToFind);
Matcher m = p.matcher(contents);
if (m.find()) {
// If pattern found, store them in the result list
result.add(key + ": " + m.group(1).trim());
}
}
// Returning the result
return result;
}
public static void main(String[] args) throws java.lang.Exception {
String urlString ="http://www.metar.gr/ws/alexan/ZWNTANA.htm";
// List all the keys whose values need to be extracted
String[] keys = {"sunriseTime", "outsideTemp", "outsideHumidity"};
// Getting the result
List<String> attributeValuePairs = getAttributesFromURL(urlString, keys);
System.out.println(attributeValuePairs);
}
}