【发布时间】:2012-10-24 23:02:02
【问题描述】:
在我的 Rails 控制器中,我有一个用户提供的 URL。我想从该 URL 的 HTML 中的 <title>...</title> 标记中提取标题,并将其分配给变量 title。我该怎么做?
编辑:在不使用外部包/库的情况下这样做会更好
【问题讨论】:
标签: html ruby-on-rails ruby-on-rails-3 url title
在我的 Rails 控制器中,我有一个用户提供的 URL。我想从该 URL 的 HTML 中的 <title>...</title> 标记中提取标题,并将其分配给变量 title。我该怎么做?
编辑:在不使用外部包/库的情况下这样做会更好
【问题讨论】:
标签: html ruby-on-rails ruby-on-rails-3 url title
我刚刚尝试使用HTTParty 来获取文档,并使用Nokogiri 来解析它:
Nokogiri::HTML::Document.parse(HTTParty.get("http://www.google.com").body).title
#=> "Google"
更新:
这适用于 Net:HTTP,它是 ruby 标准库的一部分,以及一个正则表达式:
Net::HTTP.get(URI("http://twitter.com")) =~ /<title>(.*?)<\/title>/
$1 # get the first result from the matching
#=> "Twitter"
更新:
=~ 称为“match”是String 上的一个方法,用于将正则表达式与字符串进行匹配。和Regexp#match基本一样,只是receiver和argument倒置了。
string = "<title>my title</title>
regexp = /<title>(.*?)<\/title>/
string =~ regexp
$1 # => "my title"
regexp.match(string)
$1 # => "my title"
当您获取的 HTML 文档不包含标题或标题标签时会发生什么?
"<title></title>" =~ regexp
$1 # => ""
"" =~ regexp
$1 # => nil
【讨论】:
=~ 部分的作用吗?另外,如果页面不包含<title> 标签会怎样?
<title>The new home</title>,但 $1 变量的值是 The new home。你知道这是为什么吗?
<title> 标签中,“The”和“new”之间有几个空格,但 Stackoverflow 不会这样显示。)