【问题标题】:Getting the website title from a link in a string从字符串中的链接获取网站标题
【发布时间】:2011-07-28 19:16:26
【问题描述】:

string: "这是徽章,https://stackoverflow.com/badges bla bla bla"

如果字符串包含一个链接(见上文),我想解析该链接的网站标题。

它应该返回:徽章 - 堆栈溢出。

我该怎么做?

谢谢。

【问题讨论】:

    标签: regex perl html-parsing


    【解决方案1】:

    根据给出链接的方式和定义标题的方式,您需要一种或其他方法。

    在您提供的确切场景中,使用URI::FindHTML::LinkExtractor 等获取 URL,然后 my $title=URI->new($link)->path() 将提供标题和链接。

    但是如果网站标题是<a href="https://stackoverflow.com/badges"> badged</a>这样的链接文字,那么How can I extract URL and link text from HTML in Perl?会给你答案。

    如果标题编码在链接本身,而链接是链接的文本本身,那么如何定义标题?

    1. 在任何查询之前是否需要 URI 的最后一位?设置为 URL 路径的查询会发生什么情况?
    2. 您想要主机和查询之间的部分吗?
    3. 是否要解析链接源并检索标题标签(如果有)?

    从琐碎的第一个实现到涵盖所有极端情况总是一项艰巨的任务;-)

    【讨论】:

      【解决方案2】:
      #!/usr/bin/perl -w
      
      require LWP::UserAgent;
      
      my $ua = LWP::UserAgent->new;
      $ua->timeout(10);
      $ua->env_proxy;
      
      my $response = $ua->get('http://search.cpan.org/');
      
      if ($response->is_success) {
          print $response->title();
      }
      else {
          die $response->status_line;
      }
      

      LWP::UserAgent。干杯:-)

      【讨论】:

      • 谢谢你,太棒了,但我需要抓住那个链接 :) 不是我可以定义的。如果字符串包含一个链接,那么我需要获取它的标题。 :)
      • 对此有更好的正则表达式,但这里有一个简单的有缺陷的示例:$str =~ m{(?<url>http://\S*)};
      • 我更喜欢use 而不是require,因为use 是在编译时评估的; require 在运行时评估。
      【解决方案3】:

      我为此使用URI::Find::Simple 的list_uris 方法和URI::Title

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-19
        • 1970-01-01
        • 2016-11-28
        • 2020-06-30
        • 2011-04-21
        • 1970-01-01
        • 1970-01-01
        • 2013-08-03
        相关资源
        最近更新 更多