使用 JAVA 从网站页面刮取“海拔”的值 [关闭]

Posted

技术标签:

【中文标题】使用 JAVA 从网站页面刮取“海拔”的值 [关闭]【英文标题】:Scrape the value of "Elevation" from the Website page using JAVA [closed] 【发布时间】: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 上做了很多搜索。我无法解决这个问题。我试图将字符串行转换为字符数组,然后打印特定的海拔值,但它给了我空异常错误。 Convert InputStream into JSON的可能重复 【参考方案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中添加并运行代码。

以上是关于使用 JAVA 从网站页面刮取“海拔”的值 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

facebook广告间谍工具是如何刮取数据的?

从Twitch刮取数据

Scrapy:如何通过AJAX调用刮取第二个HTML页面

在抓取两页时忽略请求

如何更好地循环进入我的网络爬虫?

无法加载页面来刮取文章标签