2012-02-29 15 views
4

NokogiriでHTMLコードからメールアドレスを取得するにはどうすればよいですか?私は正規表現で考えているが、それが最善の解決策かどうかわからない。これは、いくつかのタグの間にない場合は、メールアドレスを取得するには鋸山方法を存在する場合NokogiriでHTMLコードからメールアドレスを取得するにはどうすればよいですか?

例コード

<html> 
<title>Example</title> 
<body> 
This is an example text. 
<a href="mailto:[email protected]">Mail to me</a> 
</body> 
</html> 

私の質問です。

おかげ

+0

nokogiriを使用するには、電子メールフィールドのクラス/ IDを知りたいと思うでしょう。 – ScottJShea

+3

HTMLのサンプルと試したコードを表示する必要があります。 HTMLなしでは、私たちが作る提案は全く役に立たない。コードでは、あなたが試したことを知ることができ、答えをコードに戻すのに役立ちます。 –

答えて

9

あなたは、XPathを使用してメールアドレスを抽出することができます。

セレクタ//aは、ページ上の任意のaタグを選択し、あなたが@構文を使用してhref属性を指定することができますので、//a/@hrefはあなたのページ上のすべてのaタグのhref Sを与えます。

異なるURLタイプ(例:http:// urls)のページに可能な組み合わせのaタグがある場合、xpath関数を使用して、選択したノードをさらに絞り込むことができます。 「MAILTO:」セレクタ

//a[starts-with(@href, \"mailto:\")]/@href 

はあなたから始まるhref属性を持つすべてのaタグのhrefノードを与えます。

すべて一緒にこれを置くと、「MAILTO:」取り除くために少し余分なコードを追加し、属性値の開始から:

require 'nokogiri' 

selector = "//a[starts-with(@href, \"mailto:\")]/@href" 

doc = Nokogiri::HTML.parse File.read 'my_file.html' 

nodes = doc.xpath selector 

addresses = nodes.collect {|n| n.value[7..-1]} 

puts addresses 

テストファイルでは、次のようになります

<html> 
<title>Example</title> 
<body> 
This is an example text. 
<a href="mailto:[email protected]">Mail to me</a> 
<a href="http://example.com">A Web link</a> 
<a>An empty anchor.</a> 
</body> 
</html> 

このコードは、希望する[email protected]を出力します。 addressesは、ドキュメント内のmailtoリンク内のすべての電子メールアドレスの配列です。

0

は全体のhtmlページを取得し、正規表現を使用してみてください。

0

私はノコギリについて何も知らないと言ってこれを序文します。しかし、私はちょうど彼らのウェブサイトに行って、ドキュメントを見て、それはかなりクールだ。

電子メールリンクにemail_fieldクラス(またはそれを呼びたいもの)を追加すると、探しているものを行うようにサンプルコードを変更できます。

require 'nokogiri' 
require 'open-uri' 

# Get a Nokogiri::HTML:Document for the page we’re interested in... 

doc = Nokogiri::HTML(open('http://www.yoursite.com/your_page.html')) 

# Do funky things with it using Nokogiri::XML::Node methods... 

#### 
# Search for nodes by css 
doc.css('.email_field').each do |email| 
# assuming you have than one, do something with all your email fields here 
end 

私があなただったら、そのドキュメントを見て、いくつかの例を試してみましょう。

ここでは、サイトの:http://nokogiri.org/

関連する問題