博客
关于我
Jspider的學習应用
阅读量:474 次
发布时间:2019-03-06

本文共 2402 字,大约阅读时间需要 8 分钟。

JSpider 学习应用:抓取与解析技术总结

最近,我在开发一个小项目,主要功能是从一个根网站开始抓取信息,同时检索网站的URL,然后依次检索URL抓取网站信息。为了实现这一目标,我选择使用JSpider框架,同时对其相关功能进行了深入研究。

JSpider 的核心功能分析

1. URL 提取方式

JSpider 提供了两种主要方式来提取URL:

  • 通过 HTML 解析:支持通过 HTTPClient 或 URLLConnetion 获取网页信息,利用 HTMlParser 解析 HTML 网页,提取URL。
  • 通过文件读取:使用 JSpider 抓取并输出到文件,读取文件并提取URL。

2. JSpider 整体架构

JSpider 的整体结构分为几个关键部分:

  • 抓取WEB资源:支持下载 HTML 网页,但目前不支持下载动态网页。
  • 解析内容:提取URL和内容。
  • 递归抓取:根据解析结果中的新URL继续抓取。

3. 事件转发流程

JSpider 提供了灵活的事件过滤链,规则可以自定义:

  • Rules:决定哪些资源被抓取,规则执行直到 Decision 出现,Decision 类型包括:不关心、接受、忽略、禁止。
  • Plugins:在事件发生后采取行动,如写报告文件、显示消息、保存资源到磁盘等。
  • Events filter:选择哪些事件由哪些 Plugins 处理。

4. 配置机制

JSpider 的配置分为三个级别:

  • 公共配置(common级别):如日志配置,位于 jspider/common 目录下。
  • 蜘蛛级别(generally级别):适用于所有站点。
  • 站点级配置(per-site级别):每个站点定制。

公共级别配置

  • 日志配置:支持 Log4j 和 JDK 1.4 logging,日志信息可转发到事件系统。
  • Log4j 配置:通过 log4j.xml 文件配置。
  • JDK 1.4 配置:通过 logging.properties 文件配置。

蜘蛛级别配置

  • 代理设置:支持代理,但验证未通过时返回 407 错误。
  • 线程池设置:包括 Spider 线程池和 Thinker 线程池,默认 1 对 5。

站点级配置

  • 规则定义:如 ForbiddenPathRule,不允许访问特定路径。
  • 资源限制:如 MaxResourcesPerSiteRule,限制每个站点接收的URL数量。

插件开发

插件是 JSpider 的灵魂,用于处理事件。JSpider 提供了几个默认插件类型:

  • Console:输出信息到控制台。
  • Velocity:通过模板生成自定义报告文件。
  • FileWriter:将信息写入文件系统。
  • StatusBasedFileWriter:根据 URL 状态生成对应文件(如 200.out、404.out 等)。
  • DiskWriter:将抓取到的文件写入磁盘。

用户可以根据需求开发自定义插件,扩展 JSpider 的功能。

Nutch 安装与使用

1. Nutch 在 Windows 环境下的安装

由于 Nutch 的脚本命令需要 Linux 环境,需要使用 Cygwin 模拟环境:

  • 安装 Cygwin。
  • 下载并解压 nutch-0.9.tar.gz,例如放在 G:/nutch-0.9 目录。
  • 运行命令:
    cd /cygdrive/g/nutch-0.9
    bin/nutch
  • 2. Nutch 的基本使用

    1.1抓取少量网站

  • 创建 url.txt 文件,写入要抓取的网站顶级 URL。
  • 编辑 crawl-urlfilter.txt,配置允许的域名。
  • 运行命令:
    bin/nutch crawl url.txt -dir crawled -depth 3 -threads 4 > crawl.log
  • 1.2抓取整个互联网

  • 创建数据库目录:
    mkdir db
    mkdir segments
  • 初始化数据库:
    bin/nutch admin db -create
  • 启用 DMOZ 数据:
    bin/nutch inject db -dmozfile content.rdf.u8 -subset 3000
  • 生成抓取列表并抓取:
    bin/nutch generate db segments
    s1=`ls -d segments/2* | tail -1`
    bin/nutch fetch $s1
    bin/nutch updatedb db $s1
  • 迭代分析并更新:
    bin/nutch analyze db 5
    bin/nutch generate db segments -topN 1000
    s2=`ls -d segments/2* | tail -1`
    bin/nutch fetch $s2
    bin/nutch updatedb db $s2
    bin/nutch analyze db 2
  • 索引并去重:
    bin/nutch index $s1
    bin/nutch index $s2
    bin/nutch dedup segments dedup.tmp
  • 1.3搜索实现

    将 Nutch 战斗部署到 Tomcat:

  • nutch-0.9.war 放在 Tomcat 的发布目录。
  • 修改 nutch-site.xml 配置文件,指向索引目录。
  • 修改 Tomcat 的 server.xml,确保支持 UTF-8 编码。
  • 2. Nutch 的二次开发

    通过扩展 Nutch 的核心功能,可以实现定制化的搜索引擎。推荐参考 Nutch 的官方文档和相关技术博客。

    总结

    JSpider 和 Nutch 是实现网络抓取与搜索引擎功能的强大工具。通过合理配置和插件开发,可以实现高度定制化的抓取任务。Nutch 的安装与使用需要注意环境配置,但通过详细的操作步骤可以顺利完成。

    转载地址:http://yimbz.baihongyu.com/

    你可能感兴趣的文章
    MySQL“被动”性能优化汇总
    查看>>
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>
    MySQL不同字符集及排序规则详解:业务场景下的最佳选
    查看>>
    Mysql不同官方版本对比
    查看>>
    MySQL与Informix数据库中的同义表创建:深入解析与比较
    查看>>
    mysql与mem_细说 MySQL 之 MEM_ROOT
    查看>>
    MySQL与Oracle的数据迁移注意事项,另附转换工具链接
    查看>>
    mysql丢失更新问题
    查看>>
    MySQL两千万数据优化&迁移
    查看>>
    MySql中 delimiter 详解
    查看>>
    MYSQL中 find_in_set() 函数用法详解
    查看>>