ruby - 是否有类似 Perl 的 LWP for Ruby 的模块?

标签 ruby perl rubygems

在 Perl 中有一个 LWP module :

The libwww-perl collection is a set of Perl modules which provides a simple and consistent application programming interface (API) to the World-Wide Web. The main focus of the library is to provide classes and functions that allow you to write WWW clients. The library also contain modules that are of more general use and even classes that help you implement simple HTTP servers.

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;
}

最佳答案

最接近的匹配项可能是 httpclient ,其目标是相当于 LWP。但是,根据您的计划,可能会有更好的选择。如果您打算跟踪链接、填写表格等以抓取网页内容,您可以使用 Mechanize它类似于同名的 perl 模块。还有更多特定于 Ruby 的 gem,例如优秀的 Rest-clientHTTParty (我个人的最爱)。查看HTTP Clients category of Ruby Toolbox获取更大的列表。

更新:这是一个如何在 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

附言作为一名前 Perler,我曾经担心放弃优秀的 CPAN——我会把自己逼到 Ruby 的角落吗?难道我找不到与我依赖的模块等效的东西吗?事实证明这根本不是问题,事实上最近情况恰恰相反:Ruby(连同 Python)往往是第一个获得对新平台/Web 服务等的客户端支持的。

关于ruby - 是否有类似 Perl 的 LWP for Ruby 的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8274221/

相关文章:

perl - 我如何检查一个文件是否被另一个 Perl 程序打开?

Ruby 初学者 - 在单个项目中使用/修改现有的 gem

ruby-on-rails - 带 ruby​​ on rails 的多维数组

ruby - 如何动态创建也在命名空间中的子类?

regex - 如何重新排序字符串中的子字符串?

ruby-on-rails - actionview-4.2.4 - 未初始化的常量 ActionView::Helpers::ActiveModelHelper (NameError)

ruby-on-rails - 更改 Rails 管理员字段中的值格式

ruby-on-rails - 跑rails 3.2.13但是还没安装呢?

ruby-on-rails - has_and_belongs_to_many 关联不起作用

perl - 使用 Perl XS 和 PerlIO 使旧库工作