Ruby 如何使用Nokogiri从HTML代码中获取邮件地址

Ruby 如何使用Nokogiri从HTML代码中获取邮件地址,ruby,nokogiri,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从HTML代码中获取邮件地址?我在考虑用正则表达式,但我不知道这是否是最好的解决方案

示例代码:

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

例子
这是一个示例文本。

如果邮件地址不在某些标记之间,Nokogiri中是否存在获取邮件地址的方法?

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

我会在前面说我对Nokogiri一无所知。但我只是去了他们的网站,看了一下文档,它看起来很酷

如果您在电子邮件链接中添加一个email_字段类(或您想称之为的任何类),您可以修改它们的示例代码来完成您正在寻找的任务

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
如果我是你,我会看看他们的文档,并用他们的一些例子进行实验


以下是网站:

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

选择器
//a
将选择页面上的任何
a
标记,您可以使用
@
语法指定
href
属性,因此
//a/@href
将为您提供页面上所有
a
标记的
href
s

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

//a[starts-with(@href, \"mailto:\")]/@href
将为您提供所有
a
标记的href节点,这些标记具有以“mailto:”开头的
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
使用如下所示的测试文件:


例子
这是一个示例文本。
空锚。
此代码输出所需的
example@example.com
<代码>地址是文档中mailto链接中所有电子邮件地址的数组。

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

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<a href="http:example.com">blah</a>
<a href="mailto:foo@bar.com">blah</a>
EOT

doc.at('a[href^="mailto:"]')
  .to_html # => "<a href=\"mailto:foo@bar.com\">blah</a>"
需要“nokogiri”

doc=Nokogiri::HTML(要使用nokogiri,您需要知道电子邮件字段的类/id。您需要显示HTML的示例,以及您尝试过的代码。没有HTML,我们提出的任何建议都毫无价值。代码让我们知道您尝试了什么,并帮助我们将答案重新放入您的代码中。您只是让我写了一张纸,而模式功能强大,它们很有用。)e很少有足够的健壮性或灵活性来理解和处理HTML可能被误用或损坏的无数方式。使用它们构建的代码将是脆弱的,并且对HTML中的更改非常敏感。能够处理这些情况的模式很快就会变得笨拙。