Anemone Ruby spider - создать массив значений ключей без доменного имени

Я использую анемон для паука домена, и он работает нормально.

код для запуска сканирования выглядит следующим образом:

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.

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

Отсюда вы можете затем.map ваш массив в полезный многомерный массив:

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"]] 

Я не уверен, будет ли это работать в каждом сценарии, однако я думаю, что это может дать вам хорошее начало для сбора данных и манипулирования ими. Также, если вам нужна пара ключ / значение, вы должны изучить класс Hash в Ruby для получения дополнительной информации о том, как использовать и создавать хэши в Ruby.

Самый простой и, возможно, наименее надежный способ сделать это будет использовать

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

чтобы получить свой "ключ". Вам нужно будет протестировать различные крайние случаи, чтобы убедиться, что он работает надежно.

изменить: это вернет "www.example.com" в качестве ключа для " http://www.example.com/", который не является результатом, который вам требуется

Другие вопросы по тегам