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/", который не является результатом, который вам требуется