python爬虫--构建网络爬虫的工程要点

图论中的遍历算法:广度优先搜索BFS,深度优先搜索DFS;
互联网就是一张图,每个网页是一个节点,超链接就是连接网页的弧;
从任何一个网页出发,利用图的遍历算法,自动访问到每个网页,并把他们存起来–网页爬虫;

1、BFS还是DFS?

理论上来说,这两个算法都是可行的;
考虑到实际因素,互联网是动态的,不是静态不变的,所以网络爬虫问题更应该定义为“在有限的时间最多的爬下最重要的网页”。

1)最重要的:
各个网站最重要的网页应该是首页,,其次是从首页直接链接的网页;如果爬虫很小,只能爬取有限的网页,在这个前期下,显然BFS优于DFS;

2)最多的:
爬虫的分布式结构,网络通信的握手成本;握手是指下载服务器和网站服务器建立通信的过程,这需要时间;如果握手次数太多,则下载效率就会降低;因此,为避免握手次数太多,都是先下载第一个网站,完成后,再进入第二个网站,而不是每个网站轮流下载;
这有点像DFS;

网络爬虫对网页遍历的次序,不是简单的BFS或者DFS;

2、页面的分析和url的提取

当一个网页下载完后,需要从该网页中提取出所有的url,加入到下载队列中;
静态网页,url有明显的标识,很容易提取;
有些网页,动态脚本生成,url不是直接可见的;

3、记录哪些网页已经下载过

一个网页可以被多个网页中的超链接指向,因此,一个网页可能被多次访问到;
为了防止一个网页被多次下载,可以用要给散列表记录哪些网页已经下载过;
采用散列表的好处:判断一个网页的url是否在表中,平均只需一次的查找;

散列表会很大===瓶颈;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值