说说爬虫(spider) 的实现

 

 

http://www.codeso.cn/bbs/dispbbs.asp?boardid=9&id=10&star=1&page=1

说到爬虫,大家一定不会陌生哈~。它是搜索引擎的数据来源,对于概念性的东西,这里就不介绍了。(有问题,百度一下哦~~)

这里说说实现过程中的一些心得。

爬虫的原理,其实很简单,可以用socket实现http协议,当然MS也封装好了API,mshtml对http,ftp的封装己经很成熟了。主要看自己的取舍。socket实现要求对http协议比较了解,mshtml封装好了细节,几个API就可以搞定了。InternetOpen,InternetOpenUrl,InternetReadFile。这样基本就可以把网页的源文件拉回来。

这里会有一些细节需要处理,如果你是同步连接操作的话,那要设适当的timeout值,如果是异步连接的话,则要异步进行处理。

网页源文件拉回来以后,需要对这些源文件进行解析,提取出其中的url,然后进行爬行。网页的解析需要注意网页的编码,国内好多网站是gb2312,但utf-8的也不少了。所以,这里要对源文件进行适当的编码转换。对于URL提取,JAVA有成熟的开源库htmlParser,C++版本的好像没有@_@...,只好自己实现了,虽然用正则表达式可以轻松搞定,但是不可取哦~,因为正则表达式不是专为此定制的,性能不好。这里是性能关键哦,还是自己分析字符串吧,考验你的字符串处理功底哦~。

对于网页的爬行,可以深度优先和广度优先算法,一般垂直搜索是对一个网站的,用广度优先吧,很容易决定爬行的层次,把上述解析出来的url,置入队列中就好啦,队列很适合做广度优先的哦。

对于一些大的网站,像门户,csdn等,几分钟之内待爬行url就会过 几万,这对于程序的键壮也是考验,url是否要缓存?己经爬行过的URL,可以置入map中,防止重复拉取数据。

如果对于单线程的spider而言,工作似乎OK了,但是如果要利用多线程,充分提高spier的性能的话,这里同步与互斥就要小心啦,因为要共享己爬行map,待爬行queue.还有线程的并发调度。

累了,先写这些吧。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值