有没有像Perl'的LWP那样的模块用于Ruby?[英] Is there a module like Perl's LWP for Ruby?

本文是小编为大家收集整理的关于有没有像Perl'的LWP那样的模块用于Ruby?的处理方法,想解了有没有像Perl'的LWP那样的模块用于Ruby?的问题怎么解决?有没有像Perl'的LWP那样的模块用于Ruby?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

推荐答案

最接近的匹配可能是 httpclient,其目的是相当于 LWP.但是,根据您的计划,可能会有更好的选择.如果您打算点击链接、填写表格等以抓取网页内容,您可以使用 Mechanize,它类似于同名的 perl 模块.还有更多特定于 Ruby 的 gem,例如优秀的 Rest-clientHTTParty(我个人最喜欢的).请参阅 Ruby 工具箱的 HTTP 客户端类别 以获取更大的列表.

更新:以下是如何在 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 服务等.

本文地址:https://www.itbaoku.cn/post/786611.html