`
fsword
  • 浏览: 169001 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

我爬、我爬、我爬爬爬......

阅读更多
前一段时间写了一段抓取网页的程序,感到这个很简单,最近要搜寻网上信息,于是也打算写一个程序来做这件事,不过这次涉及到多个网站,格式很不规则,写来写去,貌似变成一个垂直爬虫了,略有心得,凑一篇博客吧。

作为一个java程序员,我选择最简单的方式──用ruby来做 ,使用的技术储备包括:
1. 任务编写工具,用rake就足够了,很方便
2. html解析器:用Hpricot,它支持各种定位方式,据说底层用C,因此性能不错
3. 另外还要一些支持库:例如地址处理使用uri、网页抓取使用net/http,编码转换使用iconv等等。

既然是爬虫,那么通过网页上的链接进行网页抓取是基本功能,显然,这是一个图遍历的问题,老规矩,两个思路──深度优先和广度优先。标准做法应该是这样:

深度优先:
1. 用户程序员给出入口网址。
2. 将网址放入“已处理链接”的列表中
3. 根据刚才这个网址取得网页,分析网页,取得上面的其它链接。
3. 对每一个链接进行过滤检查,对符合条件的链接执行步骤一开始的操作,否则结束。
4. 得到网址列表。

广度优先:
1.用户程序员给出网址。
2.将网址放入“待处理链接”列表中。
3.遍历“待处理链接”列表,对每一个地址执行如下操作:
  3.1. 根据地址取得网页
  3.2. 分析网页,获得上面的链接
  3.3. 过滤每一个链接,符合条件的添加到“待处理链接”列表中
  3.4. 将此地址移入“已处理链接”的列表中
4. 如果“待处理链接”列表为空,则结束,否则重复步骤三。
5. 结束后得到网址列表

这一段是照本宣科,我懒,所以下回接着写,呵呵
3
2
分享到:
评论
1 楼 wenyiyun 2009-11-25  
require 'net/http'

def fetch_links(dname,path)
  Net::HTTP.start(dname) do |http|
    res = http.get(path)                                # try to obtain the  
    str_body = res.body                                 # proper argument
    # puts str_body                                     #  for 'path'
    mixed_links = str_body.scan(/href="[^http].*?"/)    #
    mixed_links.each do |k|
      tmp = k.delete("href=")
        if path == '/'
          @arr_links << tmp
        else
          @arr_links.unshift tmp  unless @arr_links.include? tmp
        end
    end
  end
end

def traverse(dname)
  root = '/'
  fetch_links(dname,root)
  while link = @arr_links.shift
    if !@traversed.include? link
      @traversed << link
      fetch_links(dname,link)
      @arr_links.delete(link)    # remove the link that having been traversed
    end
  end
end


def search(dname)
  puts "After traversing the Web Site #{dname},\
   we have gotten the Hyperlinks as follow\
   (The program just takes quite a few time) :"
  @arr_links = []
  @traversed = []
  traverse(dname)
  @traversed.each do  |i|
    # puts i
     puts "http://www.iteye.com" + i
  end
end

    
search('www.iteye.com')

相关推荐

    python网站爬虫实例.py

    python开发源代码,爬爬爬,想学的可以下载.利用python编写,爬取网站数据,做成excel表格分析

    中班户外集体体育游戏:我爱爬爬爬.pdf

    中班户外集体体育游戏:我爱爬爬爬.pdf

    瞎爬爬 网易云的评论_最基础.py

    瞎爬爬 网易云音乐评论

    爬爬思特会员管理系

    "爬爬思特会员管理系"是一个专门针对企业或商家设计的会员管理系统,它旨在帮助用户有效管理和运营他们的会员数据库,提升客户忠诚度并优化业务流程。系统可能包含以下核心功能和知识点: 1. **会员注册与管理**:...

    小班体育活动乌龟爬爬.doc

    孩子们自由尝试乌龟爬,并在呼啦圈的帮助下增加难度,将呼啦圈放在背上模拟乌龟壳,这样既增加了挑战性,也锻炼了孩子们的平衡感。 第三部分,通过听鼓声辨别方向爬行,进一步提升孩子们的听力反应能力和空间判断...

    爬爬思特会员管理系统 v1.4 -ASP源码.zip

    【爬爬思特会员管理系统 v1.4 -ASP源码.zip】是一款基于ASP语言开发的会员管理系统,适用于小型企业或个人网站,用于管理和维护用户注册、登录、权限控制等核心功能。该系统提供了基础的会员信息管理、权限分配、...

    幼儿园教案2021-小班体育活动乌龟爬爬.doc

    【教案名称】:小班体育活动 - 乌龟爬爬 【教案背景】:此教案设计针对幼儿园小班的孩子,旨在通过有趣的体育活动提升幼儿的爬行能力,并培养他们对体育活动的兴趣,同时锻炼他们的反应能力和团队合作意识。 ...

    爬爬思特新闻管理系统1.2版本

    爬爬思特新闻管理系统1.2版本 专为小型个人网站而设计的后台,代码短小精悍,整个程序只有五个ASP程序文件,却实现了基本的新闻系统功能! 高度的功能代码集成,科学的逻辑判断思维,让你不再为做一个小网站而寻求一...

    幼儿园教案2021-运动:《乌龟爬爬》.doc

    【教案名称】:运动课程《乌龟爬爬》 【设计背景与理念】: 本教案的设计基于新课程理念,着重关注以下四个方面: 1. 强调儿童对运动课程的热爱和兴趣,因为兴趣是最好的老师,能激发孩子们积极参与。 2. 重视提升...

    运动:《乌龟爬爬》.doc

    《乌龟爬爬》作为一项特别为幼儿设计的运动课程,不仅成功吸引了孩子们对运动的兴趣,而且在提升他们的身体素质和协调性方面取得了显著的效果。 该运动课程以模仿乌龟爬行的动作作为核心,通过这个动作的学习与实践...

    小班体育游戏活动教案《蚂蚁爬爬爬》润新教育.txt

    小班体育游戏活动教案《蚂蚁爬爬爬》润新教育.txt

    小班上学期健康教案《乌龟爬爬爬》润新教育.txt

    小班上学期健康教案《乌龟爬爬爬》润新教育.txt

    爬爬看:可自主上传房屋视频的房产网站

    1. 爬爬看网站是一个房产信息服务网站,提供基于视频的房屋信息展示与交流平台。 2. 网站允许用户自主上传出租或出售房源的视频内容,这一特点是区别于其他房产网站的主要特色。 3. 网站提供的视频内容包括但不限于...

    安儿乐爱自由”宝宝爬爬总动员.pdf

    【标题与描述分析】:“安儿乐爱自由”宝宝爬爬总动员是一个活动策划文档,主要涉及的是2008年针对婴幼儿举办的爬行比赛活动。这个活动可能由纸尿裤品牌“安儿乐爱自由”赞助,旨在促进宝宝的健康成长,同时也是一种...

    爬爬思特新闻管理系统 v2.1

    代码全部重写,重新架构,再次优化了部分函数保持短小精悍的风格,程序文件仅9个 (本压缩包包含示例演示整站和编辑器扩展包,纯后台仅233K) 新系统以全新的接口方式让你很容易利用本系统... 软件类别:新闻文章 运行...

    幼儿园小班体育教案《乌龟爬爬》润新教育.txt

    幼儿园小班体育教案《乌龟爬爬》润新教育.txt

    基于ASP的爬爬思特新闻管理系统.zip

    【标题】:“基于ASP的爬爬思特新闻管理系统”是一个使用Active Server Pages(ASP)技术构建的新闻管理系统。ASP是微软公司开发的一种服务器端脚本环境,主要用于创建动态交互式网页。这个系统可能是用于帮助网站...

    幼儿园小班游戏教案《乌龟爬爬运动》润新教育.txt

    幼儿园小班游戏教案《乌龟爬爬运动》润新教育.txt

    ASP源码—爬爬思特新闻管理系统.zip

    "爬爬思特新闻管理系统"是一款基于ASP技术构建的信息发布系统,它主要用于帮助网站管理员高效地管理和发布新闻内容。这类系统通常包含以下几个核心功能模块: 1. **用户管理**:提供用户注册、登录、权限分配等功能...

Global site tag (gtag.js) - Google Analytics