在编写网络爬虫(spider)过程中遇到的各种难题(持续更新中)

最近在写一个网络爬虫,参考书籍为《网络机器人java编程指南》,一本7,8年前的老书了,不过对于我这种菜鸟来说其中仍然包含着大量的知识。

我从2011年2月24日开始动手写自己的spider,基本参照书上的程序来写,当然会删除一些太难理解或者很少用到的类,并对部分地方做一些优化。

下面将开始记录我在编写spider过程中遇到的各种难题与困难。

--------------------------------

2月24日

java的IO流问题。

IO流分为inputstream/outputstream与reader/writer。前者是读取字节码,后者是读取字符码。

简单说来,前者能够处理各种类型的数据,而后者在读取文字处理文本尤其是中文等语言方面有良好的性能。

input/output流采用修饰结构。一般读取文件我们用的层次是:bufferedReader(bufferedInputStream(FileInputStream(InputStream)));

IO流问题其实是一个难点,而且往往被忽略,要好好掌握。

 

2月24日一共完成了3个最最基本的类:Attribute、AttributeList、Log。

Attribute用来记录信息,类成员有name、value、delim。

所有类函数都是Synchronized,这样给方法加锁避免两个线程同时访问产生Bug。

AttributeList当然就是Attribute的队列咯。

Log类用来做记录。这个类不是很重要,不赘述了。

对了,忘记说了,尽管这个Log类不重要,但是它却体现了一种设计模式:单例模式。Log类的所有成员及方法都是静态的,因为Log类是唯一的,不能被实例化。而且Log类的构造函数是private的。这样可以防止其他类创建Log类实例。(这个设计模式还是挺重要的一part,大家有空一定要好好学啊~~~)

-------------------------------

2月25日

动手写基础类。

书中讲到访问https的问题。https可以简单的理解为http的安全版,拥有自己的编码机制对信息加密。这个地方我不太懂,这个涉及到其他两个类:SSL与Base64OutputStream。Base64是一种加密机制,一般的下载工具都会用到(比如迅雷等),SSL就不了解了。(唉,这个地方没学过,有空好好学一下~)

爬虫涉及到的基础类包括了html与URL等的解析类,当然还有专门处理URL与html的类,这些也算是一个难点,先放着吧。。。(唉,技术不过硬造成的直接后果~~~)

-------------------------------

2月27日

本来是想通过自底向上方法开发爬虫的,发现自己对这个爬虫的构造还是不够熟悉,思路不够清晰,今天换着自顶向下方法来搞这个小爬虫……

分析一下整个爬虫的结构(庖丁解虫。。。)

该爬虫的类应该分为几个类组:

1.通用类组:基本用途,一开始可以忽略,包括Base64码的转换以及连接等用途;

2.HTTP类组:主要负责向服务器发送HTTP请求,包括HTTP以及HTTPSocket类;

3.解析类组:用于分析网页的HTML及cookies等;

4.Spider类组:即核心类组,用一个线程池来管理各个线程。

当然咯,做为一只强大的爬虫,必然是多线程的,这样才能够爬遍全球!那就先掌握以下多线程技术。

我的爬虫使用线程池技术解决问题。一篇很好的关于线程池技术的文章:http://www.ibm.com/developerworks/cn/java/l-threadPool/

从这篇文章我们可以了解到,这个爬虫包括几个部分:线程池管理器、工作线程、任务接口、任务队列。

今天的经验:不要一开始就去追求细节,还是从框架入手先写一个最最简单的框架再一步步细化,迭代式开发总是没有错的!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值