【问题标题】:Scrape the value of "Elevation" from the Website page using JAVA [closed]使用 JAVA 从网站页面刮取“海拔”的值 [关闭]
【发布时间】:2019-01-17 07:47:19
【问题描述】:

我正在制作一个程序来抓取网页中的海拔值。网页地址是-https://nationalmap.gov/epqs/pqs.php?x=35.227085&y=-80.843123&units=Meters&output=json

当我们打开上面的链接时,显示的网页是-

{"USGS_Elevation_Point_Query_Service":{"Elevation_Query"{"x":35.227085,"y":-80.843123,"Data_Source":"3DEP 1/3 弧秒","高程":"-1000000","单位":"米"}}}

我无法从网页上显示的数据中仅打印 Elevation 的值,即 -1000000。我需要使用 JAVA 来完成。请帮忙。我是编程新手。

我尝试了下面的代码。而是打印网页的全部内容。我只需要海拔值。

URL url;
    InputStream is = null;
    BufferedReader br;
  

    try {
        url = new URL("https://nationalmap.gov/epqs/pqs.php?x=35.227085&y=-80.843124&units=Meters&output=json");
        is = url.openStream();  // throws an IOException
        br = new BufferedReader(new InputStreamReader(is));

     //  System.out.println (br.lines());
        while ((line = br.readLine()) != null) {
            System.out.println(line);    
        }
        

我只想要使用 JAVA 的高程值。

【问题讨论】:

  • 您是 Java 新手,但您尝试使用 Java 执行网页抓取?
  • 和我的项目工作有关。我必须找到大量纬度和经度的海拔值,并对这些海拔值进行某种计算。
  • 我在 JSON 上做了很多搜索。我无法解决这个问题。我试图将字符串行转换为字符数组,然后打印特定的海拔值,但它给了我空异常错误。

标签: java


【解决方案1】:

此网址包含json 数据,因此您需要使用任何 json 框架,例如杰克逊

首先,你要定义返回消息的json模型:

public static class Model {
    @JsonProperty("USGS_Elevation_Point_Query_Service")
    private ElevationPointQuery elevationPointQuery;

    public static class ElevationPointQuery {
        @JsonProperty("Elevation_Query")
        private Data data;

        public static class Data {
            @JsonProperty
            private double x;
            @JsonProperty
            private double y;
            @JsonProperty("Data_Source")
            private String dataSource;
            @JsonProperty("Elevation")
            private String elevation;
            @JsonProperty("Units")
            private String units;
        }

    }
}

然后你必须定义方法,从给定的 url 读取 json 消息并返回模型:

private static <T> T readJsonByUrl(URL url, Class<T> cls) throws IOException {
    try (InputStream in = url.openStream()) {
        return new ObjectMapper().readerFor(cls).readValue(in);
    }
}

最后,您已准备好读取模型并获取所需数据:

final URL url = new URL("https://nationalmap.gov/epqs/pqs.php?x=35.227085&y=-80.843124&units=Meters&output=json");
Model data = readJsonByUrl(url, Model.class);
System.out.println("Elevation = " + data.elevationPointQuery.data.elevation);

要使用 Jackson,您必须添加以下依赖项:

compile 'com.fasterxml.jackson.core:jackson-core:2.9.8'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.8'
compile 'com.fasterxml.jackson.core:jackson-databind:2.9.8'

【讨论】:

  • 当我将代码放入 Eclipse 时,它​​在 ObjectMapper() 处显示错误。我该怎么办?
  • 你必须添加Jackson依赖项
  • 先生,我问了很多问题,但你能提供一个杰克逊依赖的链接吗?提前谢谢你。
  • Baeldung 的杰克逊 JSON 教程 - baeldung.com/jackson
  • 有什么jar文件,我可以在eclipse中添加并运行代码。
猜你喜欢
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2022-06-20
  • 2010-12-02
相关资源
最近更新 更多