如何使用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中存在获取邮件地址的方法。
由于
答案 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.com
。 addresses
是文档中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”。