2016-10-09 2 views
1

아래 URL에있는 모든 링크의 배열을 만들려고합니다. page.scan(URI.regexp) 또는 URI.extract(page)을 사용하면 단순한 URL 이상을 반환합니다.루비 및 정규식을 사용하여 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

그냥 그때는 노코 기리와 실제 HTML로 구문 분석하는 데 더 나은 것 같다 텍스트 파일의 링크 (<a href="..."> 요소)을 추출, 다음 링크를이 방법으로 추출하려는 경우 :

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