2011-03-25 1 views
3

HTML文書のテキストファイルへのリンクをすべて取得する必要がありますが、これを実行する最良の方法はわかりませんが、私はルビーで次のように試しました.. 。* .txtファイルへのすべてのリンクを集める

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

が、私はこの表現は、テキストファイルを指しているすべての可能なリンクをカバーする場合、一部が内蔵されている場合は、このための正規表現、私は疑問に思ってわかりませんか?または巨大なWebページのテキストファイルへのすべてのリンクを取得するためのより良い方法を誰かが知っている場合。

+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 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

それもそれをキャプチャします。投稿 –

関連する問題