使用 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 从网站页面刮取“海拔”的值 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章