2011-03-25 5 views
3

HTML 문서의 텍스트 파일에 대한 모든 링크를 검색해야하는데, 가장 좋은 방법은 무엇인지 모르겠지만, 나는 루비에서 다음을 시도했다. 이있는 경우.* .txt 파일에 대한 모든 링크를 모으는 것

line.scan(/<a href="([\w+:\/.-]*.txt)/) 

하지만이 표현이 가능한 모든 링크 파일을 텍스트 가리키는 커버 확실하지 않다, 나는 궁금 일부 내장이에 대한 정규 표현식? 또는 거대한 웹 페이지의 텍스트 파일에 대한 모든 링크를 검색하는 더 좋은 방법을 아는 사람이라면.

+2

사용에게 DOM 파서를 모든 링크를 수집 한 후 정규 표현식을 사용하여 모든 링크의 배열을 검색하여'.txt'로 끝나는 링크를 찾으십시오. 두 정규 표현식을 사용하여 두 작업을 수행하지 마십시오. – CanSpice

답변

6

이것은 HTML을 통해 걸어와 '.txt로'확장자를 가진 모든하는 HREF를 찾을 수 :

#!/usr/bin/env ruby 

require 'nokogiri' 

html = <<EOT 
<html> 
    <head><title>foo</title></head> 
    <body> 
    <a href="file.txt">text file</a> 
    <a href="file.jpg">jpg file</a> 
    <a href="file2.txt">text file 2</a> 
    </body> 
</html> 
EOT 
doc = Nokogiri::HTML(html) 
puts doc.search('a').select { |n| n['href'][/\.txt$/] }.map{ |n| n['href'] } 

> file.txt 
> file2.txt 
정말 사용하는 것보다 훨씬 더 방탄 인 내용을 구문 분석 Nokogiri을 사용하고

정규식.

+0

나는 노코 기리를 설치하려고하지만 오류가 발생합니다 : test21.rb : 1 :에서'필요 : 그런 파일로드 없습니다 - 노코 기리 (LoadError) test21.rb에서 \t : 1 그러나 내가 가지고있는 실제로 gem을 설치했습니다 : gem list | grep nokogiri nokogiri (1.4.4) – Flethuseo

+0

Ruby <1.9를 사용하고 있습니까? 그렇다면 보석을 필요로하기 전에'require 'rubygems'를 사용해야합니다. Ruby> 1.9는 자동으로 그렇게합니다. –

1

(그냥 링크, 모든 TXT 파일을 캡처)이 시도 :

html.scan(/[^\s"']+\.txt/) 

는 텍스트 파일에 대한 링크를 캡처하려면 :

html.scan(/<a [^<>\n]*?href=["']([^\s"']+\.txt)["'][^<>\n]*?>.*?<\/a>/m) 
+0

문서에 실제로 링크가 아닌'example.txt' 행이 있으면 어떻게 될까요? – CanSpice

+0

그것은 또한 그것을 붙잡을 것입니다. –

관련 문제