3

LWP::UserAgentHTML::Selector::XPathおよび HTML::TreeBuilder::XPathモジュールを使用してhref、一連の検索結果の最初の YouTube ビデオの属性の値を取得しています。

これまでの私のコードは次のとおりです。

use LWP::UserAgent;
use HTML::TreeBuilder::XPath;
use HTML::Selector::XPath;

my $ua = LWP::UserAgent->new;

#my $response =..
my $html = "http://www.youtube.com/results?search_query=run+flo+rida";

my $tree = HTML::TreeBuilder::XPath->new;

my $xpath = HTML::Selector::XPath::selector_to_xpath("(//*[@id = 'search-results']/li)[1]/div[2]/h3/a/@href/");
my @nodes = $tree->findnodes($xpath);
print" $nodes[0]";

私の印刷が間違っているかどうか、または他の構文が間違っているかどうかはわかりません。今のところ印刷されています

HTML::TreeBuilder::XPath=HASH(0x1a78250)

印刷するものを探しているとき

/watch?v=JP68g3SYObU

助けてくれてありがとう!

4

1 に答える 1

7

ここには多くの問題があります。

  • あなたは、常に すべての Perl プログラムの先頭にいる必要がuse strictあります。use warnings見落としがちな多くのエラーをキャッチし、コードについて助けを求める場合にのみ礼儀正しくします。この場合、XPath 文字列に配列変数名が含まれており、文字列に挿入する意図がない可能性があるという警告が@id表示@hrefされます。

  • HTML::Selector::XPathCSS セレクターを XPath 式に変換するを使用しています。ただし、XPath 式を指定しているため、機能せず、モジュールは必要ありません。

  • HTML ページを取得するコンストラクタがあるためLWP、使用する必要はまったくありません。HTML::TreeBuildernew_from_url

このプログラムは、必要なことを行うようです。属性値URIの相対 URL から絶対 URL を導出するモジュールも追加しました。href

use strict;
use warnings;

use HTML::TreeBuilder::XPath;
use URI;

my $url = "http://www.youtube.com/results?search_query=run+flo+rida";

my $tree = HTML::TreeBuilder::XPath->new_from_url($url);

my $anchor = $tree->findnodes('//ol[@id="search-results"]//h3[@class="yt-lockup2-title"]/a/@href');
my $href = URI->new_abs($anchor->[0]->getValue, $url);
print $href;

出力

http://www.youtube.com/watch?v=JP68g3SYObU
于 2013-01-21T04:35:54.523 に答える