是否有像Perl的LWP for Ruby这样的模块?

San*_*ing 7 ruby perl rubygems

在Perl中有一个LWP模块:

libwww-perl集合是一组Perl模块,它为万维网提供简单而一致的应用程序编程接口(API).该库的主要重点是提供允许您编写WWW客户端的类和函数.该库还包含更常用的模块,甚至包含可帮助您实现简单HTTP服务器的类.

Ruby有类似的模块(gem)吗?

更新

以下是我从特定网站中提取URL的功能示例.

use LWP::UserAgent;
use HTML::TreeBuilder 3;
use HTML::TokeParser;

sub get_gallery_urls {
    my $url = shift;

    my $ua = LWP::UserAgent->new;
    $ua->agent("$0/0.1 " . $ua->agent);
    $ua->agent("Mozilla/8.0");

    my $req = new HTTP::Request 'GET' => "$url";
    $req->header('Accept' => 'text/html');

    # send request
    $response_u = $ua->request($req);

    die "Error: ", $response_u->status_line unless $response_u->is_success;

    my $root = HTML::TreeBuilder->new;
    $root->parse($response_u->content);

    my @gu = $root->find_by_attribute("id", "thumbnails");

    my %urls = ();

    foreach my $g (@gu) {
        my @as = $g->find_by_tag_name('a');

        foreach $a (@as) {
            my $u = $a->attr("href");

            if ($u =~ /^\//) {
                $urls{"http://example.com"."$u"} = 1;
            }
        }
    }

    return %urls;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*mas 10

最接近的匹配可能是httpclient,其目的是相当于LWP.但是,根据您的计划,可能会有更好的选择.如果您计划关注链接,填写表单等以便刮取Web内容,则可以使用与perl模块类似的Mechanize.还有更多特定于Ruby的宝石,例如出色的Rest-clientHTTParty(我个人最喜欢的).有关更大的列表,请参阅Ruby ToolboxHTTP客户端类别.

更新:这是一个如何在Mechanize中找到页面上所有链接的示例(Ruby,但它在Perl中类似):

require 'rubygems'
require 'mechanize'

agent = Mechanize.new

page = agent.get('http://example.com/')

page.links.each do |link|
  puts link.text
end
Run Code Online (Sandbox Code Playgroud)

PS作为一个前Perler我自己,我曾经担心放弃优秀的CPAN - 我会把自己画成Ruby的角落吗?难道我无法找到我所依赖的模块的等价物吗?事实证明这根本不是问题,事实上最近恰恰相反:Ruby(以及Python)往往是第一个获得客户支持新平台/ Web服务等的人.

  • Sandra Schlichting:如果它太难了,那么这表明你正在处理你的工具错误.我对你的网站项目一无所知,但它告诉你不知道普拉克.问题中的代码可以替换为`use URI; 使用Web :: Query; 我的%urls = map {URI-> new($ _) - > abs('http://example.com') - > as_string => 1} wq($ url) - > find('#tignails a') - > attr('href');`,足够短的oneliner.通过学习更多的CPAN来解决这个难题(所以请访问[本地贩子](http://pm.org)和[活动](http://yapceurope.org/events/)),而不是跳到你不同的语言更了解. (4认同)
  • 为什么不在Plack/PSGI之上学习像Mojolicious这样的体面框架和堆栈呢?快速开发,现代,优雅,便携......基于您现有的Perl实力的绝佳选择. (2认同)
  • 您的Web框架(Catalyst,Mojolicious等)位于Plack之上.Plack旨在抽象出你正在迎合什么类型的网络服务器的细节.您可以将Plack置于Apache,某些云服务或任意数量的其他Web服务器(包括其自己的独立服务器)之上,而无需更改位于其上的应用程序. (2认同)