`

构建自己的DSL之三 抓取文件管理

阅读更多
转载请标明出处:http://fuliang.iteye.com/blog/1127437

我们抓取的网页抽取的结果是带有日期的文件,经常需要操作某个日期范围的文件,来进行统计,抽样,入库,所有需要一个方便的DSL来处理这件事情。
我们希望制定几个条件就可以得到符合条件的文件,比如:
data_set = CrawlerDataSet.with_cond do |cond|
     cond.dir("/mydir").
          from_date("2011-05-01").
          to_date("2011-07-08")
end

然后我们可以得到符合条件的文件名:
data_set.file_names

我们还可以利用构建自己的DSL之二中的CrawlerFile:
data_set.each do |file|
   puts file.version
end

我们可以利用Date Range来轻松完成这些功能:
#!/usr/bin/env ruby

require 'date'
require 'crawler_file'

class CrawlerDataSet
	class << self 
		def with_cond
			return yield CrawlerDataSet.new
		end
	end

	def initialize
		@files = []
	end

	def dir(dir)
		@dir = dir
		self
	end
	
	def from_date(from_date)
		@from_date = Date.parse(from_date)
		self
	end

	def to_date(to_date=nil)
		@to_date = if to_date.nil? then Date.today else Date.parse(to_date) end
		self
	end
	#use the date range
	def file_names
		(@from_date	.. @to_date).each do |date|
			date_str = date.strftime("%Y%m%d")	
			Dir.glob("#@dir/#{date_str}-*dedup").each do |file|
				@files << file
			end
		end
		@files
	end

	def each
		file_names.each do |file_name|
			begin
				crawler_file = CrawlerFile.new(file_name)
				yield crawler_file
			ensure
				crawler_file.close
			end	
		end
	end
	
	def each_with_name
		file_names.each do |file_name|
			begin
				crawler_file = CrawlerFile.new(file_name)
				yield crawler_file, file_name
			ensure
				crawler_file.close
			end
		end
	end
end
        
分享到:
评论

相关推荐

    通过django创建搜网网站,通过elasticsearch实现动态搜索scrapy抓取的数据.zip

    本项目就是一个典型的实例,它利用Django框架构建了一个搜索网站,同时结合了Elasticsearch来处理Scrapy抓取的数据,实现动态搜索。下面将详细阐述这个项目中的关键知识点。 1. Django框架: Django是一个高级的...

    bluebook-maven-plugin-1.1.zip

    2. **构建脚本**(如`pom.xml`):如果项目使用Maven进行构建,那么`pom.xml`是项目配置文件,包含了项目的依赖管理、构建目标和插件配置等信息。 3. **测试用例**:用于验证XPather功能正确性的代码,可以帮助理解...

    skrape.it:基于Kotlin的testingscrapingparsing库,提供了分析和从HTML(服务器和客户端呈现)中提取数据的功能。 通过提供直观的DSL,它特别强调易用性和高度的可读性。 它旨在成为测试库,但也可以方便地用于抓取网站

    skrape.it虽然主要是为了测试设计,但它的功能同样可以用于构建简单的爬虫,从一个或多个页面中抓取特定的数据。 **Scraper** 是指用于从网页中提取数据的工具。skrape.it提供了这样的工具,它支持解析HTML元素并...

    迅速搭建全文搜索平台——开源搜索引擎实战教程--代码.rar

    索引构建阶段,对抓取的数据进行预处理,生成倒排索引;查询处理时,用户输入的查询词被解析并转化为对索引的操作;最后,根据索引结果返回最相关的文档。 在这个实战教程中,我们将使用Elasticsearch作为我们的...

    使用Irony的WWW DSL-第2部分

    在使用Irony库构建DSL时,你需要定义以下内容: 1. **Grammar(语法)**:这包括词汇表(Vocabulary)和语法规则。词汇表定义了语言中的关键字、标识符、运算符等。语法规则则描述了这些元素如何组合成有效的语句。 ...

    J2EE博客精华

    - **DSL(领域特定语言)设计**:介绍如何设计适合自己领域的特定语言,以提高开发效率和可维护性。 #### 4. 开发工具与版本控制 - **Tiny Admin管理平台**:介绍Tiny Admin管理平台的功能、使用方法及其在企业级...

    Ruby-Wombat轻量级的RubyWeb爬虫

    Ruby-Wombat是一个专门为Ruby开发者设计的轻量级Web爬虫工具。它的主要目的是帮助开发者高效地从网页上...通过学习和掌握Wombat,你可以快速地构建起自己的网络数据获取系统,为各种数据分析项目提供可靠的数据来源。

    Node.js-Webscraper是一个基于headlesschrome和serverless框架的Web爬虫

    Node.js-Webscraper是一个利用headless Chrome和serverless架构构建的Web爬虫工具,它在Web抓取领域提供了一种高效且灵活的解决方案。在本文中,我们将深入探讨这个项目的核心技术和应用。 首先,我们要了解...

    python包dateUtil和pyparsing

    通过构建表达式树,pyparsing可以轻松解析具有嵌套结构的数据,这在处理命令行参数、配置文件或创建自己的DSL(领域特定语言)时非常有用。 这两个库在许多项目中都有应用,特别是在数据分析、日志分析、自动化脚本...

    基于python开发的知名教授信息搜索引擎

    Python的elasticsearch-dsl库提供了与Elasticsearch交互的高级接口,使得构建索引和执行复杂查询变得更加简单。通过设置合适的映射(mapping),我们可以确保教授的各项属性被正确地索引,以便于进行全文搜索、过滤...

    PADT数据包的构造

    "pppoe_full.cap" 可能是一个网络捕包文件,使用像Wireshark这样的工具抓取了PPPoE通信过程,包括PADT数据包,用于分析和调试。"PPPOE会话终止分析.doc" 可能是一个文档,详细阐述了PPPoE会话终止的原理和过程,或者...

    tweets-for-github-projects-gatherer:Scala中的简单控制台应用程序,可从自定义域中获取最受欢迎的GitHub存储库的推文

    - `build.sbt`: SBT 的构建文件,定义项目依赖和构建设置。 - `README.md`: 项目介绍和使用指南。 - `.gitignore`: Git 忽略规则,指定哪些文件不纳入版本控制。 **实现流程** 1. **配置**: 首先,开发者需要...

    tareaKotlinISBN

    不过,我们可以根据标题推测,此项目可能要求开发者使用 Kotlin 来处理或验证 ISBN 号码,也可能涉及网络爬虫抓取图书信息,或者是构建一个能够搜索、存储和显示图书信息的简单应用程序。 【标签】"Kotlin" 明确...

    webscraper:Web刮板服务,可从产品中检索信息

    3. **DSL(领域特定语言)**: Kotlin 提供了构建 DSL 的强大能力,方便构建简洁的配置或数据解析代码。 4. **Anko库**: Kotlin 社区维护的 Anko 库简化了 Android 和服务器端的常见任务,如 JSON 解析和网络请求。 ...

    camel

    Apache Camel 是一个强大的开源集成框架,它以企业集成模式(Enterprise Integration Patterns)为基础,为开发者提供了构建可扩展、模块化和灵活的集成解决方案的能力。这个框架的核心是它的路由引擎,该引擎允许...

    MeanElk:MEAN ELK-MongoDB Express角节点+ Elasticsearch Logstash Kibana

    MongoDB是一个基于分布式文件存储的开源文档数据库,它使用JSON格式的文档进行数据存储,具有高扩展性和灵活性。在MEAN ELK架构中,MongoDB用于收集和存储原始数据,例如服务器日志或应用性能指标。它的NoSQL特性...

    自动化测试

    pytest 是一个更加强大的第三方测试框架,它提供了更多的特性,如参数化测试、断言改进、方便的 fixtures(测试上下文管理)等。两者都可以用于编写和组织测试用例。 3. **Requests 和 BeautifulSoup**:对于 API ...

    秋葵晶体:Gumbo文库的C晶体结合

    通过阅读项目的README文件,了解如何编译和安装库,接着你就可以在自己的Crystal项目中导入并使用这个库来解析和操作HTML了。这个结合不仅为HTML解析提供了强大的工具,也为Crystal开发者扩展了处理Web内容的能力。

    es-demo:elasticsearch相关用例

    Elasticsearch基于Lucene构建,提供了RESTful API接口,使得操作更加简单直观。它具有以下关键特性: 1. **分布式**: 支持分布式部署,能自动处理节点间的通信和数据分布,提供高可用性和故障恢复能力。 2. **实时...

Global site tag (gtag.js) - Google Analytics