如何通过Nokogiri从HTML代码中获取邮件地址?

时间:2012-02-29 01:12:32

标签: ruby nokogiri

如何使用Nokogiri从HTML代码获取邮件地址?我正在考虑正则表达式,但我不知道它是否是最好的解决方案。

示例代码

<html>
<title>Example</title>
<body>
This is an example text.
<a href="mailto:example@example.com">Mail to me</a>
</body>
</html>

我的问题是,如果在某个标签之间不存在,则在nokogiri中存在获取邮件地址的方法。

由于

4 个答案:

答案 0 :(得分:11)

您可以使用xpath提取电子邮件地址。

选择器//a将选择页面上的所有a标记,您可以使用href语法指定@属性,因此//a/@href会给出您是页面上所有href标记的a

如果页面上有可能的a标记混合使用不同的网址类型(例如http://网址),您可以使用xpath函数进一步缩小所选节点的范围。选择器

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

将为您提供所有a标记的href节点,这些标记的href属性以&#34; mailto:&#34;开头。

将所有这些放在一起,并添加一些额外的代码来删除&#34; mailto:&#34;从属性值的开头:

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:example@example.com">Mail to me</a>
<a href="http://example.com">A Web link</a>
<a>An empty anchor.</a>
</body>
</html>

此代码输出所需的example@example.comaddresses是文档中mailto链接中所有电子邮件地址的数组。

答案 1 :(得分:0)

尝试获取整个html页面并使用正则表达式。

答案 2 :(得分:0)

我会先说这个我对Nokogiri一无所知。但我只是去他们的网站看了看文档,看起来很酷。

如果您将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/

答案 3 :(得分:0)

CSS选择器现在可以(最终)在参数开头找到文本:

<Switch>
  <ProtectedRoute 
    exact 
    path="/" 
    render={(...params) => 
      <PinProvider><Map {...params} /></PinProvider>
    } 
  />
  <Route exact path="/login" component={Login} />
  <Route exact path="/signup" component={Signup} />
  <AdminRoute 
    exact 
    path="/userlist" 
    render={(params) => 
      <UserProvider><UserList {...params} /></UserProvider>
    } 
  />
</Switch>

Nokogiri尝试跟踪jQuery扩展。我曾经有一个维护者在谈论变更通知或消息的链接,但是我的行程却有所不同。

有关更多信息,请参见“ CSS Attribute Selectors”。