【问题标题】:Rails fetch title tag from HTMLRails 从 HTML 中获取标题标签
【发布时间】:2012-10-24 23:02:02
【问题描述】:

在我的 Rails 控制器中,我有一个用户提供的 URL。我想从该 URL 的 HTML 中的 <title>...</title> 标记中提取标题,并将其分配给变量 title。我该怎么做?

编辑:在不使用外部包/库的情况下这样做会更好

【问题讨论】:

    标签: html ruby-on-rails ruby-on-rails-3 url title


    【解决方案1】:

    我刚刚尝试使用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
    

    【讨论】:

    • 感谢您的回复。我以后可能会尝试,但如果我可以在不使用外部包/库的情况下做到这一点,那就太好了。
    • 谢谢,Net:HTTP 解决方案似乎有效。你能解释一下=~ 部分的作用吗?另外,如果页面不包含&lt;title&gt; 标签会怎样?
    • 好的,现在很清楚了 :) 顺便说一句,我尝试输入 &lt;title&gt;The new home&lt;/title&gt;,但 $1 变量的值是 The new home。你知道这是为什么吗?
    • (在&lt;title&gt; 标签中,“The”和“new”之间有几个空格,但 Stackoverflow 不会这样显示。)
    • 刚试过,它可以保留所有空格。正则表达式和匹配器不会删除它,抱歉,我不知道是什么导致了问题。
    猜你喜欢
    • 2010-10-17
    • 2014-07-05
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2012-11-07
    • 2012-01-19
    相关资源
    最近更新 更多