您的位置:首页 > 理论基础 > 计算机网络

用c语言写一个网络爬虫

2016-09-08 18:19 148 查看
(同步个人博客 http://sxysxy.org/blogs/28 到csdn

写一个网络爬虫

写一个网络爬虫,来获取一个网站上感兴趣的信息。

最基本的模型

就是图。每个页面看作一个节点,若页面A有到达页面B的链接,则添加一条由A到B的单向边。爬虫要遍历这张图。

遍历这张图

广度优先搜索即可。 不推荐用深度优先搜索(容易陷入单个分支而难以搜索到更广泛全面的信息) (如果不明白,请自行查询图论相关资料)

(以上noip普及组难度)

但是细节(重点)

1 这不是OI题目,不会把节点以编号的形式给你。 一个页面只能通过它的网址认识它。由网页之间的关系构成的图中很可能(99.99…%)有环,搜索的时候要判重否则就会死在环里面。一个网址,是一个字符串,代表一个页面,如何快速判重? 字典树!

2 如何知道页面A有到达页面B的链接? 抓取页面A的网页源代码分析即可。重点便是html语句例如
href= "/blogs/3"
,表示A能到达页面/blogs/3/

3 访问网络。windows: winsock2.h系列, linux: sys/socket.h系列。用TCP Socket简单地实现http即可。

一个简单的实现

https://github.com/sxysxy/httpSpider 这里我使用c语言做的一个简单的网络爬虫(已经完工)。 同时里面还有字典树和队列数据结构的实现。 httpSpider爬虫搜索遍历网站的同时,可以回调自定制的plugin.dll外挂dll的analyzer函数,将网站的数据发给它(这样泥就可以完成数据分析)。

本来想写个长篇大论的

但是比起什么可持久化树套树啊,FFT/NTT啊,这个真的没什么可多说的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息