黑马程序员技术交流社区
标题: 如何在网页上获取有用的信息 [打印本页]
作者: liangwaqi 时间: 2017-12-13 10:13
标题: 如何在网页上获取有用的信息
本帖最后由 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>
*/
最后获取到的信息:
作者: wyw 时间: 2017-12-13 12:00
666。学到了很多东西
作者: Port 时间: 2017-12-14 18:50
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |