#ruby #uri #net-http
#ruby #uri #net-http
Вопрос:
Я пытаюсь создать массив всех ссылок, найденных по указанному ниже URL. Использование page.scan(URI.regexp)
или URI.extract(page)
возвращает больше, чем просто URL-адреса.
Как мне получить только URL-адреса?
require 'net/http'
require 'uri'
uri = URI("https://gist.github.com/JsWatt/59f4b8ce6bbf0c7e4dc7")
page = Net::HTTP.get(uri)
p page.scan(URI.regexp)
p URI.extract(page)
Ответ №1:
Если вы просто пытаетесь извлечь ссылки ( <a href="...">
элементы) из текстового файла, то лучше проанализировать его как реальный HTML с помощью Nokogiri, а затем извлечь ссылки таким образом:
require 'nokogiri'
require 'open-uri'
# Parse the raw HTML text
doc = Nokogiri.parse(open('https://gist.githubusercontent.com/JsWatt/59f4b8ce6bbf0c7e4dc7/raw/c340b3fbcab7923e52e5b50165432b6e5f2e3cf4/for_scraper.txt'))
# Extract all a-elements (HTML links)
all_links = doc.css('a')
# Sort weed out duplicates and empty links
links = all_links.map { |link| link.attribute('href').to_s }.uniq.
sort.delete_if { |h| h.empty? }
# Print out some of them
puts links.grep(/store/)
http://store.steampowered.com/app/214590/
http://store.steampowered.com/app/218090/
http://store.steampowered.com/app/220780/
http://store.steampowered.com/app/226720/
...