Re: 有关爬虫的一些资料(不断添加中。。。有同学找到好文也贴到这儿来)

16 views
Skip to first unread message
Message has been deleted

ZouGang

unread,
Jun 25, 2008, 9:33:16 AM6/25/08
to Joysearch
搜索引擎中网络爬虫的设计分析
作者:Ackarlix

下面简单介绍一下搜索引擎的机器爬虫的制作和一些基本要注意的事项。

说的简单易懂一些,网络爬虫跟你使用的〖离线阅读〗工具差不多。说离线,其实还是要跟网络联结,否则怎么抓东西下来?那么不同的地方在哪里?

1】 网络爬虫高度可配置性。
2】 网络爬虫可以解析抓到的网页里的链接
3】 网络爬虫有简单的存储配置
4】 网络爬虫拥有智能的根据网页更新分析功能
5】 网络爬虫的效率相当的高

那么依据特征,其实也就是要求了,如何设计爬虫呢?要注意哪些步骤呢?

1】 url 的遍历和纪录
这点 larbin 做得非常的好,其实对于url的遍历是很简单的,例如:


cat [what you got]| tr \" \\n | gawk '{print $2}' | pcregrep ^http://


就可以得到一个所由的 url 列表

2】多进程 VS 多线程
各有优点了,现在一台普通的PC 例如 booso.com 一天可以轻松爬下5个G的数据。大约20万网页。

3】时间更新控制
最傻的做法是没有时间更新权重,一通的爬,回头再一通的爬。
通常在下一次爬的的数据要跟上一次进行比较,如果连续5次都没有变化,那么将爬这个网页的时间间隔扩大1倍。

如果一个网页在连续5次爬取的时候都有更新,那么将设置的爬取时间缩短为原来的1/2。

注意,效率是取胜的关键之一。

4】爬的深度是多少呢?
看情况了。如果你比较牛,有几万台服务器做网络爬虫,我劝您跳过这一点。
如果你同我一样只有一台服务器做网络爬虫,那么这样一个统计您应该知道:

网页深度:网页个数:网页重要程度
0 : 1 : : 10
1 :20 : :8
2: :600: :5
3: :2000: :2
4 above: 6000: 一般无法计算

好了,爬到三级就差不多了,再深入一是数据量扩大了3/4倍,二是重要度确下降了许多,这叫做“种下的是龙种,收获的是跳蚤。

5】爬虫一般不之间爬对方的网页,一般是通过一个Proxy出去,这个proxy有缓解压力的功能,因为当对方的网页没有更新的时候,只要拿到
header 的 tag就可以了,没有必要全部传输一次了,可以大大节约网络带宽。

apache webserver里面纪录的 304 一般就是被cache的了。

6】请有空的时候照看一下robots.txt

7】存储结构。
这个人人见智,google 用 gfs 系统,如果你有7/8台服务器,我劝你用NFS系统,要是你有70/80个服务器的话我建议你用afs 系
统,要是你只有一台服务器,那么随便。

给一个代码片断,是我写的新闻搜索引擎是如何进行数据存储的:




NAME=`echo $URL |perl -p -e 's/([^\w\-\.\@])/$1 eq "\n" ?
"\n":sprintf("%%%2.2x",ord($1))/eg'`
mkdir -p $AUTHOR
newscrawl.pl $URL --user-agent="news.booso.com+(+http://booso.com)" -
outfile=$AUTHOR/$NAME




--------------------------------------------------------------------------------


以上转载的是一篇关于搜索引擎网络爬虫(即搜索引擎蜘蛛程序)的设计分析的文章,介绍了一些蜘蛛设计的常识,这些信息对SEO都很有帮助,特别是注意以
下几句:

1.通常在下一次爬的的数据要跟上一次进行比较,如果连续5次都没有变化,那么将爬这个网页的时间间隔扩大1倍,如果一个网页在连续5次爬取的时候都有
更新,那么将设置的爬取时间缩短为原来的1/2。

网页更新频度严重影响着搜索引擎蜘蛛程度对网站的爬行,爬取次数越多意味着网页收录几率会越大、收录数量越多,收录是SEO最基础的一个环节。

2.好了,爬到三级就差不多了,再深入一是数据量扩大了3/4倍,二是重要度确下降了许多,这叫做“种下的是龙种,收获的是跳蚤。

尽量将网站保持在三级目录内,深层次的网页会给搜索引擎带来很大的压力,当然,我想Google有足够的服务器来承担这些压力,但从侧面来说,3层目录
下的网页被抓取及更新的频度要低很多。前面,我说过,要想办法使网站物理结构和逻辑结构吻合,这体现于URL的良好设计,现在你可以检查下前台生成的静
态网页的实际目录有几层,考虑是否可以优化。
关于网站逻辑结构和URL设计,请参考“网站内部链接优化是SEO的第一要素”和“二级域名与一级目录之间该如何选择?”

ZouGang

unread,
Jun 25, 2008, 9:34:28 AM6/25/08
to Joysearch
wiki里的这句话说的不错:

While it is fairly easy to build a slow crawler that downloads a few
pages per second for a short period of time, building a high-
performance system that can download hundreds of millions of pages
over several weeks presents a number of challenges in system design, I/
O and network efficiency, and robustness and manageability.

作为我们爬虫的目标吧。

ZouGang

unread,
Jun 25, 2008, 9:52:19 AM6/25/08
to Joysearch
HTTP1.1标准:http://www.w3.org/Protocols/rfc2616/rfc2616.html
所有的HTTP服务器遵循这个标准。可以参考一下,从头读来头会变大。

ZouGang

unread,
Jun 25, 2008, 10:47:17 AM6/25/08
to Joysearch
推荐一本书:Introduction to Information Retrieval
首位作者居然是斯坦福大学NLP出身的Christopher D. Manning,难怪第一眼看上去看得很眼熟,不过还有点大跌眼镜的感觉,一直觉
得NLP和IR交集的地方不是很多(主要是觉得NLP技术现在不够成熟),Manning怎么会突然冒出来写了这本书,难道是失业了?后来看看第二作者
是Yahoo Research的头,才觉得比较靠谱。
不过书翻了翻感觉还是不错,写得挺到位,爬虫那段可以参考一下。不过可惜是英文的,读起来吃力一些。
传上去了。注意看ppt,PPT总结得还是不错的,言简意赅。

柳松

unread,
Jun 26, 2008, 12:35:21 AM6/26/08
to Joysearch
感谢!我已经和同学们说了,让他们复习之余也来这里看看,呵呵。

华斌 (爬虫技术)

unread,
Jun 27, 2008, 7:35:03 AM6/27/08
to Joysearch
有的网站(e.g. wikipedia)在学校机房上不了,网页打不开.
另外,我想请教下:
1.什么是spider traps?
2.policy(4)中说到 parallelization policy(分布式爬虫)
parallelization 和distributed是一回事吗?
谢谢~

On 6月25日, 下午9时31分, ZouGang <zougang1...@gmail.com> wrote:
> 其实爬虫是工程型比较强的东西,重在实践,我这儿贴几个网址。
>
> 维基百科对于爬虫的介绍,个人觉得总结的还是不错:http://en.wikipedia.org/wiki/Web_crawler
>
> 里面的四个policy归纳的挺好:
> (1) selection policy
> 一般只需要关注breadth first方式,深度优先容易陷入爬虫trap,问题多多的带?号的动态网页的采集也可以暂时放一放
> (2) re-visit policy
> 更新策略,可以先设计简单策略为主
> (3) politeness policy
> 遵从robots.txt的规则
> (4) parallelization policy
> 分布式爬虫,也可以暂时先放一放
>
> 爬虫的基本的Architecture就如网页中的图所示。

泡泡

unread,
Jun 28, 2008, 6:52:25 AM6/28/08
to joys...@googlegroups.com
情况是这样的:
Spider traps我目前遇到苏大当中就有一个,我是在数学系的网站中看到这个链接的,估计是设计的缺陷,例如
有这样一个网址,**.cn/a指向A页面
A页面有个连接,相对URL为"/a"
但令人费解的是,**.cn/a/a也指向A页面
除此之外,**.cn/a/a/a也指向A页面,
由于它们链接各不相同,所以最终会形成 /a,/a/a,/a/a/a,...的死循环

不知道这是由于什么问题造成的。。。

并行爬虫和分布式爬虫应该是用一个意思,可能爬虫集群的组织形式不同吧,个人觉得并行的组织形式要较分布式的组织形式更加有序一些,呵呵。不知道对不对。

Jarvis.Guo

unread,
Jun 28, 2008, 7:28:42 AM6/28/08
to joys...@googlegroups.com
the distrbution is the basis of the parallelization.
 
The distribution provides the chance of the multiply components working concurrently, 
concurrently. 
There are broad range of the distribution. 
As you know ,the pipeline is the multiple componets distributed in very small  
scale.The the muliple processors is  distributed in the scale of one computer. 
The cluster is distributed in the scale of the  LAN. 
  In  the traditional concept of distributed system , it is focused on the  
geographical distribution. I  think it should be the logical  distribution. 
 
 
意思应该是 parallel(并行)是目的, distribute(分布式)是基本的方法


 
在08-6-28,泡泡 <lamfe...@126.com> 写道:

泡泡

unread,
Jun 28, 2008, 9:02:43 AM6/28/08
to joys...@googlegroups.com
呵呵,谢谢学长,长见识了

ZouGang

unread,
Jun 29, 2008, 10:30:44 AM6/29/08
to Joysearch
自己写一个http server就可以实现这个东西。
其实,http 服务器也就是个类似 收到一个请求、返回一个应答(即网页)的过程。因为http://**.cn/后面的URI"/a/a/a/
a/"是属于服务器自己解析的,因此Http服务器可能会把他们都归并成"/a/"。比如我写的那个简单的http server,收到任何请求
串:"http://localhost:10000/afdafsdaf","http://localhost:10000/","http://
localhost:10000/f123123123",......返回的都只有hello。
> >> 爬虫的基本的Architecture就如网页中的图所示。- 隐藏被引用文字 -
>
> - 显示引用的文字 -

ZouGang

unread,
Jun 29, 2008, 11:37:58 AM6/29/08
to Joysearch
Reply all
Reply to author
Forward
0 new messages