2016-10-09 6 views
1

Ich versuche ein Array aller Links zu erstellen, die unter der folgenden URL zu finden sind. Wenn Sie page.scan(URI.regexp) oder URI.extract(page) verwenden, werden mehr als nur URLs zurückgegeben.eine Webseite nach URLs mit Ruby und Regex scannen

Wie bekomme ich nur die URLs?

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) 

Antwort

1

Wenn Sie nur versuchen, Links zu extrahieren (<a href="..."> Elemente) aus der Textdatei dann ist es besser scheint es, als echter HTML zu analysieren mit Nokogiri, und dann den Links auf diese Weise extrahiert:

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