2

我正在使用Anemone来蜘蛛一个域,它工作正常。

启动爬网的代码如下所示:

require 'anemone'

Anemone.crawl("http://www.example.com/") do |anemone|
  anemone.on_every_page do |page|
      puts page.url
  end
end

这很好地打印出域的所有页面 url,如下所示:

http://www.example.com/
http://www.example.com/about
http://www.example.com/articles
http://www.example.com/articles/article_01
http://www.example.com/contact

我想做的是使用 url 的最后一部分作为键创建一个键值对数组,并使用 url '减去域'作为值。

例如

[
   ['','/'],
   ['about','/about'],
   ['articles','/articles'],
   ['article_01','/articles/article_01']
]

抱歉,如果这是基本的东西,但我是 Ruby 新手。

4

2 回答 2

2

我将首先在代码块之外定义一个数组或哈希,然后将您的键值对添加到其中:

require 'anemone'

path_array = []
crawl_url = "http://www.example.com/"    

Anemone.crawl(crawl_url) do |anemone|
  anemone.on_every_page do |page|
    path_array << page.url
    puts page.url
  end
end

然后,您可以从这里将数组映射到可用的多维数组中:

path_array.map{|x| [x[crawl_url.length..10000], x.gsub("http://www.example.com","")]}

=> [["", "/"], ["about", "/about"], ["articles", "/articles"], ["articles/article_01", "/articles/article_01"], ["contact", "/contact"]] 

我不确定它是否适用于所有场景,但是我认为这可以为您提供一个很好的开始,让您了解如何收集和操作数据。此外,如果您想要一个键/值对,您应该查看 Ruby 的 Hash 类以获取有关如何在 Ruby 中使用和创建哈希的更多信息。

于 2013-10-23T12:33:46.077 回答
0

最简单且可能最不可靠的方法是使用

page.url.split('/').last

获取您的“钥匙”。您需要测试各种边缘情况以确保它可靠地工作。

编辑:这将返回“www.example.com”作为“ http://www.example.com/ ”的键,这不是您需要的结果

于 2013-10-23T11:59:28.783 回答