说说爬虫(spider) 的实现
2008-12-03 17:51
253 查看
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.还有线程的并发调度。 累了,先写这些吧。。。 |
相关文章推荐
- 抢先式多线程网络爬虫spider在智能搜索引擎中的实现
- 网络爬虫(spider)程序的编程实现
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [三] 模型配置方式实现爬虫
- 网络爬虫(spider)程序的编程实现
- go_spider 简单爬虫实现
- Java 多线程 爬虫程序(spider)设计与实现
- Python3.6 协程 aiohttp+asyncio+pysql异步爬虫的实现 爬取资源存入数据库
- java spring+mybatis整合实现爬虫之《今日头条》搞笑动态图片爬取
- 说说android端实现Airplay多屏互动(一)
- [js高手之路]Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件
- 从零实现一个高性能网络爬虫(二)应对反爬虫之前端数据混淆
- python实现简单爬虫功能
- 网络爬虫爬取全国省市区(动态ip代理的获取,实现对ip限制的突破)
- 基于Heritrix的特定主题的网络爬虫配置与实现
- 多线程获取豆瓣网页的网络爬虫(Python实现)
- 七月算法课程《python爬虫》第三课: 爬虫基础知识与简易爬虫实现
- Python实现简单网络爬虫功能
- python编写网页爬虫脚本并实现APScheduler调度
- 爬虫简单示例,用httpClient4.2.1实现
- java搜索---网络爬虫实现