|
Web spider 可以使用一组策略来最小化对 Internet 的消耗。Google 要对 80 亿 Web 页面进行索引,这一挑战的难易程度可见一斑。这种行为策略定义了爬虫会将哪些页面带入索引程序、以什么样的频率回到 Web 站点上再次对它进行检查,以及一种礼貌原则。Web 服务器可以使用一个名为 robot.txt 的文件来执行爬虫,它会告诉爬虫不能搜索的内容。
企业 Web 爬虫
与标准的搜索引擎 spider 一样,这种 Web spider 对大众不能使用的内容进行索引。例如,公司通常有一些内部 Web 站点只能由公司的员工使用。这种 spider 被限定于本地环境。由于它的搜索是受限的,因此通常会有更多计算能力可用,进行专门的和更加完整的索引操作也是可能的。Google 则更进一步,为了对个人计算机的内容进行索引,它专门提供了一个桌面搜索引擎。
专用爬虫
爬虫也有一些非传统的用途,例如对内容进行归档或生成统计数据。归档爬虫会简单地对 Web 站点进行遍历,将其网站的本地内容存储到一个长期的存储介质上。这可以用来进行备份,或者在更重要的情况中,用来获取 Internet 内容的快照。统计数据对理解 Internet 的内容或其中的缺陷方面很有用处。爬虫可以用来确定有多少 Web 服务器在运行、有多少给定类型的 Web 服务器在运行、可用 Web 页面的数量,甚至失效链接的个数(这会返回 HTTP 404 错误,表明页面没有找到)。
其他有用的专用爬虫包括 Web 站点检查器。这些爬虫会查找缺少的内容、验证所有的链接,并会确保超文本标记语言(HTML)是有效的。
E-mail 收集爬虫
现在要介绍黑暗面了。不幸的是,一小撮坏家伙却会破坏我们大家使用的整个 Internet。这种爬虫会在 Web 站点上搜索 e-mail 地址,然后生成我们每天不得不处理的大量垃圾邮件。据 Postini 报告,到 2005 年 8 月,Postini 用户的 e-mail 消息中有 70% 都是不想要的垃圾邮件。
E-mail 收集可能是最容易的一种爬行行为,在本文中最后一个爬虫例子中我们会看到这一点。
现在我们已经了解了一些 Web spider 和 scraper 的基本知识,接下来的 4 个例子显示了怎么样使用流行的脚本语言(例如 Ruby 和 Python)来为 Linux 构建 spider 和 scraper。
例子 1:简单的 scraper
这个例子向您展示了该怎么样确定给定的 Web 站点正在运行哪种 Web 服务器。这可能非常有趣,而且如果能在一个足够大的示例上实现,还可以提供关于 Web 服务器在政府、学术界和工业界中的普及率的有趣统计数据。
清单 1 给出了用来搜索 Web 站点以确定 HTTP 服务器的 Ruby 脚本。Net::HTTP 类实现了一个 HTTP 客户机和 GET、HEAD 和 POST 方法。只要向 HTTP 服务器发起一个请求,HTTP 响应消息的一部分就会指出这些内容是由哪个服务器提供的。这里使用 HEAD 方法来获取有关根页面('/')的信息,而没有从站点上下载一个页面。只要 HTTP 服务器成功响应(由响应代码 "200" 指示),就会循环迭代响应消息的每行内容,来寻找 server 关键字,如果找到,就打印这个值。这个关键字的值是一个代表 HTTP 服务器的字符串。
清单 1. 用来简单搜索元数据的 Ruby 脚本(srvinfo.rb)
#!/usr/local/bin/ruby
require 'net/http'
# Get the first argument from the command-line (the URL)
url = ARGV[0]
begin
# Create a new HTTP connection
httpCon = Net::HTTP.new( url, 80 )
# Perform a HEAD request
resp, data = httpCon.head( "/", nil )
# If it succeeded (200 is success)
if resp.code == "200" then
# Iterate through the response hash
resp.each {|key,val|
# If the key is the server, print the value
if key == "server" then
print " The server at "+url+" is "+val+"\n"
end
}
end
end
|
除了显示怎么样使用 srvinfo 脚本之外,清单 2 还给出了 scraper 在很多政府、学术和商业 Web 站点上的应用。这些服务器有很大差异,从 Apache(占 68% )到 Sun 和 Microsoft® 的 IIS(Internet Information Services)。您还可以看到其中有一个应用没有给出所使用的服务器。有趣的是就当密克罗尼西亚联邦政府还在运行一个旧版本的 Apache(应该更新了)的时候,Apache.org 却在技术上不断大胆尝试、推陈出新。
清单 2. 服务器 scraper 的示例应用
[mtj@camus]$ ./srvrinfo.rb www.whitehouse.gov
The server at www.whitehouse.gov is Apache
[mtj@camus]$ ./srvrinfo.rb www.cisco.com
The server at www.cisco.com is Apache/2.0 (Unix)
[mtj@camus]$ ./srvrinfo.rb www.gov.ru
The server at www.gov.ru is Apache/1.3.29 (Unix)
[mtj@camus]$ ./srvrinfo.rb www.gov.cn
[mtj@camus]$ ./srvrinfo.rb www.kantei.go.jp
The server at www.kantei.go.jp is Apache
[mtj@camus]$ ./srvrinfo.rb www.pmo.gov.to
The server at www.pmo.gov.to is Apache/2.0.46 (Red Hat Linux)
[mtj@camus]$ ./srvrinfo.rb www.mozambique.mz
The server at www.mozambique.mz is Apache/1.3.27
(Unix) PHP/3.0.18 PHP/4.2.3
[mtj@camus]$ ./srvrinfo.rb www.cisco.com
The server at www.cisco.com is Apache/1.0 (Unix)
[mtj@camus]$ ./srvrinfo.rb www.mit.edu
The server at www.mit.edu is MIT Web Server Apache/1.3.26 Mark/1.5
(Unix) mod_ssl/2.8.9 OpenSSL/0.9.7c
[mtj@camus]$ ./srvrinfo.rb www.stanford.edu
The server at www.stanford.edu is Apache/2.0.54 (Debian GNU/Linux)
mod_fastcgi/2.4.2 mod_ssl/2.0.54 OpenSSL/0.9.7e WebAuth/3.2.8
[mtj@camus]$ ./srvrinfo.rb www.fsmgov.org
The server at www.fsmgov.org is Apache/1.3.27 (Unix) PHP/4.3.1
[mtj@camus]$ ./srvrinfo.rb www.csuchico.edu
The server at www.csuchico.edu is Sun-ONE-Web-Server/6.1
[mtj@camus]$ ./srvrinfo.rb www.sun.com
The server at www.sun.com is Sun Java System Web Server 6.1
[mtj@camus]$ ./srvrinfo.rb www.microsoft.com
The server at www.microsoft.com is Microsoft-IIS/6.0
[mtj@camus]$ ./srvrinfo.rb www.apache.org
The server at www.apache.org is Apache/2.2.3 (Unix)
mod_ssl/2.2.3 OpenSSL/0.9.7g
|
共6页: 上一页 [1] 2 [3] [4] [5] [6] 下一页
|