对网页内容的抓取比较的感兴趣,于是就简单的学习了一下,如果不使用任何的框架去抓取网页的内容,感觉有点难度,我就简单点来吧,这里所使用的jsoup框架,抓取网页的内容与使用jquery选择网页的内容差不多,上手很快。下面就简单的介绍一下吧!
首先是获取网络资源的方法:
/** * 获取网络中的超链接 * * @param urlStr * 传入网络地址 * @return 返回网页中的所有的超链接信息 */ public String getInternet(String urlStr, String encoding) { URL url = null; URLConnection conn = null; String nextLine = null; StringBuffer sb = new StringBuffer(); // 设置系统的代理信息 Properties props = System.getProperties(); props.put("proxySet", "true"); props.put("proxyHost", "10.27.16.212"); props.put("proxyPort", "3128"); System.setProperties(props); try { // 获取网络资源 url = new URL(urlStr); // 获取资源连接 conn = url.openConnection(); conn.setReadTimeout(30000);//设置30秒后超时 conn.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream(), encoding)); // 开始读取网页信息获取网页中的超链接信息 while ((nextLine = reader.readLine()) != null) { sb.append(nextLine); } } catch (Exception e) { e.printStackTrace(); } return sb.toString(); }
我们在获取了网络资源之后,我们就可以根据自己的需求筛选出对自己有用的资源了,下面开始抓取资源:
public static void main(String[] args) { MavenTest test = new MavenTest(); try { String html = test.getInternet( "http://www.weather.com.cn/html/weather/101020100.shtml#7d","UTF-8"); //将html文档转换为Document文档 Document doc = Jsoup.parse(html); //获取class为.weatherYubaoBox的div的元素 Elements tableElements = doc.select("div.weatherYubaoBox"); // System.out.println(tableElements.html()); //获取所有的th元素 Elements thElements = tableElements.select("th"); //打印出日期的标题信息 for (int i = 0; i < thElements.size(); i++) { System.out.print(" "+thElements.get(i).text() + " "); } // 输出标题之后进行换行 System.out.println(); //获取表格的tbody Elements tbodyElements = tableElements.select("tbody"); for (int j = 1; j < tbodyElements.size(); j++) { //获取tr中的信息 Elements trElements = tbodyElements.get(j).select("tr"); for (int k = 0; k < trElements.size(); k++) { //获取单元格中的信息 Elements tdElements = trElements.get(k).select("td"); //根据元素的多少判断出白天和夜晚的 if (tdElements.size() > 6) { for (int m = 0; m < tdElements.size(); m++) { System.out.print(tdElements.get(m).text() + " "); } // 白天的数据打印完成后进行换行 System.out.println(); }else{ for(int n =0; n < tdElements.size(); n++){ System.out.print(" "+tdElements.get(n).text()); } //打印完成夜间的天气信息进行换行处理 System.out.println(); } } } } catch (Exception e) { e.printStackTrace(); } }
运行的结果如下:
最后附上框架的地址:http://www.open-open.com/jsoup/selector-syntax.htm