larbin编译成功后,有两个主要方向:一是通过相关资料读Larbin的源代码,最终的目的是自己能开发个简单的爬虫;第二个是分析得到的数据,做数据的分析与挖掘。当然,也有人想把这些数据提取出来后,怎么导入数据库。
所有源代码的读法,肯定要用到工具。在windows下可以用vs系列,而linux开发的源代码则用SourceInsight。所以这里我使用SourceInsight软件看Larbin。
首先通过网络知识了解爬虫的基本知识和基本问题。爬虫从一个URL出发,使用广度优先算法,遍历整个网站。其中涉及URL的规整化(MD5算法),URL的判重(Bloom Filter算法),爬虫队列的设计,对网络和文件存取的控制等问题。
Larbin的主函数中有Larbin爬虫的主要工作流程,其代码如下:
stateMain(-count);
waitBandwidth(&old);
stateMain(1);
for (int i=0; i<global::maxFds; i++)
global::ansPoll[i] = 0;
for (uint i=0; i<global::posPoll; i++)
global::ansPoll[global::pollfds[i].fd] = global::pollfds[i].revents;
global::posPoll = 0;
stateMain(2);
input();
stateMain(3);
sequencer();
stateMain(4);
fetchDns();
stateMain(5);
fetchOpen();
stateMain(6);
checkAll();
// select
stateMain(count++);
poll(global::pollfds, global::posPoll, 10);
stateMain(7);
其中,stateMain 函数其实是个简单的宏,只是将状态变量简单的设置为i,记录当前爬虫所处在第几个阶段;
#define stateMain(i) (stateMain = i)
其他几个函数,网上查到的资料如下:
1.waitbandwidth() 等待带宽满足需要
2.input() 将需要爬取的seed URL装载进来
3.sequencer() 对将要爬取的页面进行缓冲,确定每一轮可以进行爬取的页面
4.fetchDns() 获取待爬取页面的IP地址和端口号,这需要通过练习DNS服务器将URL进行转换
5.fetchOpen() 获取当前网页
6.checkAll() 做一些检验和网页链接分析(也是我们可以定制化的一部分)
先写到这,继续学习中……