首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 服务器>linux服务器应用>文章内容
在 Linux 上构建 Web spider
来源:www.unix5.com 作者:riechelr_hl 发布时间:2007-06-05  

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 客户机和 GETHEADPOST 方法。只要向 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] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·用Samba实现文件服务器功能
·在Linux上建立DNS服务器
·在linux下设置WWW Server
·用Linux建立局域网服务器
·如何设定管理SAMBA网络邻居服务
·如何建造Open WebMail伺服器(图
·如何建造Open WebMail伺服器二(
·DNS 基本观念与实际运用(图文讲
·Linuxconf DHCP伺服器架設与管理
·Linux系统下基于NUMA构建的服务
  相关文章
·在Linux上建立DNS服务器
·在linux下设置WWW Server
·用Samba实现文件服务器功能
·用Linux建立局域网服务器
·如何设定管理SAMBA网络邻居服务
·如何建造Open WebMail伺服器(图
·如何建造Open WebMail伺服器二(
·DNS 基本观念与实际运用(图文讲
·Linuxconf DHCP伺服器架設与管理
·Linux系统下基于NUMA构建的服务

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!