一个简单网络爬虫的实现
——初尝试 抓取百度首页
由于分组我选择了网络爬虫组,在了解了一些简单的概念性知识之后,便迫不及待的想要动手尝试一下自己抓取网页信息,在此分享一下自己学习网络爬虫的过程。
首先,什么是网络爬虫? 以下是百度百科的定义
1) 从一个初始URL集合中挑选一个URL,下载该URL对应的页面;
2) 解析该页面,从该页面中抽取出其包含的URL集合,接下来将抽取的URL集合再添加到初始URL集合中;
3) 重复前两个过程,直到爬虫达到某种停止标准为止。
我是用Java语言来写网络爬虫的,所以初期是在学习Java语言的语法知识,并且因为抓取到的页面信息是由HTML写的,所以也简单的对HTML做了一些了解,大概知道某些标签的含义即可。
在动手开始写网络爬虫之前,学长推荐了几个比较好用的jar包给我,也在此贴上。
Jsoup: http://pan.baidu.com/s/1kW2NU
文档:http://www.open-open.com/jsoup/
FileUtils: http://pan.baidu.com/s/1y3Adr
文档:http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html
通过阅读Jsoup文档我们发现,其实要抓取一个页面非常简单,这里以http://www.baidu.com 为例:
- Document doc = Jsoup.connect("http://www.baidu.com").get();
connect(String url)方法会创建一个新的Connection,然后通过get()方法获得一个Document对象;
其实剩下的就是一个对HTML的解析工作了,比如通过doc.toString()方法就可以获取到网页HTML的字符串,然后通过I/O操作可以吧这个字符串保存在本地文件中,这样一个简单的抓取工作就结束了,只需要几行代码而已。
在抓取到的HTML文件中可以看到
![网络爬虫学习笔记(一) - ㄟ As time goes by℡ - ㄟ As time goes by℡](http://img1.ph.126.net/XDuUv8GQ538z3S0eaABXFQ==/6597847121379219487.png)
- Elements links = doc.select("a");
- for ( Element link : links ) {
- String linkHref = link.attr("href");
- }
通过这样几条语句就可以得到页面中<a>标签下的href属性了,加在for循环中就可以遍历到页面中的所有URL,这些内容在上面的Jsoup文档中也有讲到;之后只要通过上面的方法进行就可以得到这些URL对应的HTML文本了。
上面还说道一个jar包是FileUtils,他可以很方便的进行文件读写操作,例如在上面我们得到的一个页面HTML字符串暂且用Str来表示,使用FileUtils只需要一条语句便可以将其保存到本地。
- FileUtils.writeStringToFile(new File("baidu.html"), Str, "UTF-8");
它的含义就是将Str字符串以"UTF-8"的编码方式保存在当前目录下的baidu.html文件中
在之后的学习中还会用到这个包中的其他方法,具体请参考API文档
这样,一个最简单的网络爬虫就成功了,还有很多的功能需要添加,加油!