世界上第一个爬虫叫做"互联网漫游者(www wanderer)",是由MIT学生马修·格雷写的。我想他大概也是通过细心细致的观察后发现:互联网上的页面之间是有联系的。比如说,通过分析一个页面的链接,就能下载到其它页面。而且做起来可能没那么困难,就放手去尝试,第一个爬虫就成了!
初学爬虫,顺着自己的思路往下做。
第一个爬虫的第一个部分就是下载,同时也知道第二个部分是通过已经下载的页面下载到新的页面。
关键的地方在于java.net.URL类中有openStream()方法,就相当于获得下载的入口,看到这个感觉今天的任务就已经完成一半了。
运行代码过后,刷新工程目录就可以
TIPS:在写代码的时候出现了乱码问题,第一次是输出到控制台乱码,就在BufferedReader中加了参数”utf-8“,然后下载的页面又乱码,就在OutPutStream后面添加了”utf-8“就ok了。
一、工程目录
图1. 工程目录
二、程序源代码
package csdnBlog; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URL; /** * 功能:通过URL下载网页 * * 实现方式:通过获得URL的输入流 * * @author <span style="color:blue"><b>胡征南</b></span> * */ public class URLPageDownload { /** * 下载页面的具体函数实现 * * @param str * 输入的地址 */ public static void downloadPage(String str) { BufferedReader br = null; FileOutputStream fos = null; OutputStreamWriter osw = null; String inputLine; try { URL url = null; url = new URL(str); // 通过url.openStream(),来获得输入流 br = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8")); File file = new File("download.html"); fos = new FileOutputStream(file); osw = new OutputStreamWriter(fos, "utf-8"); // 将输入流读入到临时变量中,再写入到文件 while ((inputLine = br.readLine()) != null) { osw.write(inputLine); // System.out.println(inputLine); } br.close(); osw.close(); System.err.println("下载完毕!"); } catch (MalformedURLException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null && osw != null) { br.close(); osw.close(); } } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { // 此处做测试 URLPageDownload.downloadPage("http://www.csu.edu.cn/"); } }
三、运行效果
图2. 运行后刷新项目产生的新文件
图3. 运行download.html的效果
乱码解决方案参考资料:
1、文件读取乱码
http://blog.csdn.net/greenqingqingws/article/details/7395213
2、文件写入乱码
http://hi.baidu.com/duanxzf/item/ff9837e4c2eaea1b8c3ea870