黑马程序员技术交流社区

标题: 如何在网页上获取有用的信息 [打印本页]

作者: liangwaqi    时间: 2017-12-13 10:13
标题: 如何在网页上获取有用的信息
本帖最后由 liangwaqi 于 2017-12-13 10:17 编辑

如何在网页上获取有用的信息
如何通过java代码来获取网页上的一些有用的信息呢?
首先我们来说一下原理:使用java程序,访问某个网页,获得返回来的html代码。然后就可以利用jsoup相关api,来解析该html文档,解析出来我们需要的数据。
图样图森破:

这个就是我们使用java代码获取网页信息的流程图。


例如获取到如下html源码:


针对上面的数据,就可以解析出我们想要的数据,例如每个地方的银行帐号、户名、联系电话等。 注意:对应那些是通过js动态生成的网页,采用这种办法,就无法达到我们的目的了,这种网页,不在本文的讨论范围。
我们还需要准备一个jsoupjar包用来解析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>        
*/
最后获取到的信息:






作者: wyw    时间: 2017-12-13 12:00
666。学到了很多东西
作者: Port    时间: 2017-12-14 18:50






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2