2016-10-09 1 views
1

Je suis en train de créer un tableau de tous les liens trouvés à l'URL ci-dessous. L'utilisation de page.scan(URI.regexp) ou URI.extract(page) renvoie plus que simplement des URL.analyse d'une page Web pour les URLs avec ruby ​​et regex

Comment obtenir uniquement les 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) 

Répondre

1

Si vous essayez juste d'extraire des liens (<a href="..."> éléments) du fichier texte il semble préférable de l'analyser comme réel HTML avec Nokogiri, puis extraire les liens de cette façon:

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/ 
...