本帖最后由 liangwaqi 于 2017-12-13 10:17 编辑
如何在网页上获取有用的信息 如何通过java代码来获取网页上的一些有用的信息呢? 首先我们来说一下原理:使用java程序,访问某个网页,获得返回来的html代码。然后就可以利用jsoup相关api,来解析该html文档,解析出来我们需要的数据。 图样图森破:
这个就是我们使用java 代码获取网页信息的流程图。
例如获取到如下html 源码:
针对上面的数据,就可以解析出我们想要的数据,例如每个地方的银行帐号、户名、联系电话等。 注意:对应那些是通过js动态生成的网页,采用这种办法,就无法达到我们的目的了,这种网页,不在本文的讨论范围。 我们还需要准备一个jsoup的jar包用来解析html [size=10.5000pt]
@Test public void getHtml() throws IOException { // 1,将地址转化为URL对象 URL url = new URL("http://cs.itheima.com/flow/flow.html"); // 2,打开URL链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 3,将连接设置 conn.setRequestMethod("GET"); // 模拟浏览器请求 conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); conn.setRequestProperty("Accept-Encoding", "gzip, deflate"); conn.setRequestProperty("Accept-Language", "zh-CN"); conn.setRequestProperty("Cache-Control", "max-age=0"); conn.setRequestProperty("Connection", "keep-alive"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("DNT", "1"); conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 Maxthon/5.1.3.2000"); // 4,建立HttpURLConnection链接 conn.connet(); // 此处getOutputStream会隐含的进行connect // 所以在开发中不调用上述的connect()也可以)。 // 5,读取网页内容(IO流) InputStream in = conn.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] arr = new byte[1024]; int len = 1024;
while((len=in.read(arr))!=-1){ baos.write(arr, 0, len); } in.close();
// 6,内容解析 Document document = Jsoup.parse(baos.toString("utf-8"), "UTF-8");
Elements divList = document.select(".bank_list"); for (int i = 0; i < divList.size(); i++) { Element div = divList.get(i); Element h3 = div.getElementsByTag("h3").get(0); System.out.println(h3.text());
Elements pList = div.getElementsByTag("p"); for(int j=0; j<pList.size(); j++){ System.out.println(pList.get(j).text()); }
System.out.println(); }
} } /* <div class="bank_list"> <h3>上海中心</h3> <p><span>招商银行:</span>1109 0927 9110 204</p> <p>户名:江苏传智播客教育科技股份有限公司</p> <p>开户行:招商银行上海浦江镇支行</p> <p>汇款后可致电查询:400-618-9090</p> </div> */ 最后获取到的信息:
|