電子書籍の厳選無料作品が豊富!

単語をGOOGLEで検索すると、ソースでは以下のように表示されます。

<!doctype html><head><meta http-equiv="X-UA-Compatible" content="IE=8"><meta http-equiv=content-type content="text/html; charset=UTF-8"><title>シュウマイ - Google 検索</title><script>window.google={kEI:"oZQ7TdTAAcLMcNDKlYUH",kEXPI:"17259,20782,28186,28233,28290",kCSI:{e:"17259,20782,28186,28233,28290",ei:"oZQ7TdTAAcLMcNDKlYUH",expi:"17259,20782,28186,28233,28290"},ml:function(){},kHL:"ja",time:function(){return(new Date).getTime()},log:function(c,d,

以下略

この長い文章をテキストファイルに書き込みたいと思っています。
できればCGIフォームを使用して、そこに入力された言葉で検索、検索した結果のソースをtxtファイルに保存したいのですが、どなたか教えていただけないでしょうか。
言語はPerlです。

よろしくお願いします。

A 回答 (4件)

さくらはHTML::TreeBuilderとかも入ってないですか?


私ならHTML解析を独自に頑張るより、さくらでCPANを使えるように頑張ります。
詳しくは「さくら CPAN」でググって下さい。

この回答への補足

TreeBuilderも入ってないようです。私はライトプランなのでsshが使えないためソフトをインストールすることができません。
当面、最初のやり方で頑張るしかなさそうです。

補足日時:2011/01/30 02:38
    • good
    • 0
この回答へのお礼

手動でpmを設置しましたが、やはり上手く動かないためLWP::UserAgentで一つずつ作っていくことにしました。いろいろ教えていただきありがとうございました。

お礼日時:2011/02/11 06:02

とりあえずチラ見した限り、my $res = $ua->request( $req );で取った$resが、


その後何もされないまま終わってるように見えますが。
以下がコピペで動きます(Windows用にエンコードしてます)ので、試して下さい。

use Encode;
use WWW::Mechanize;
my $engine = 'http://www.google.com/search?q=';
my $word = 'シュウマイ'; # CGIならmy $word = $q->param('search_word')にでも。

my $mech = WWW::Mechanize->new();
$mech->get( $engine . $word );
my @links = $mech->find_all_links( class => 'l' );
foreach my $link ( @links ) {
print encode('cp932', $link->text), "\n";
}

この回答への補足

ありがとうございます。ローカルではきちんと作動しましたが、さくらサーバではWWW::Mechanizeがインストールされていないようで出来ませんでした。
LWP::UseAgentを使って同じようにやることはできないのでしょうか。

たびたびお願いします。

補足日時:2011/01/28 05:30
    • good
    • 0

検索しましたか?


http://oshiete.goo.ne.jp/qa/5951803.html

それともファイルへの書き込み方が必要なのでしょうか?

この回答への補足

WWW::Mechanizeというものについては知りませんでした。
以前、以下のようなソースを書いたのですが、名詞をGOOGLEに渡して、検索結果の中から特定の一単語を返すというものなのですが、上手く動作しません。このソースの問題点について教えていただけますでしょうか。

#!/usr/local/bin/perl

package search;

use LWP::UserAgent;
use HTTP::Request;
use Jcode;

require 'usemecapi.pl';

sub main()
{
my ( $word ) = @_;
$word = Jcode->new( $word )->utf8;#ここついか
my $url = &MakeUrl( $word );
my $ua = LWP::UserAgent->new( agent => 'user agent' );
my $req = HTTP::Request->new( 'GET' => $url );
my $res = $ua->request( $req );
&GetText( Jcode->new( join( '', @data ), "utf8")->eucjp );#euc-jp->eucjp
}
sub GetText( $ )
{
my ( $html ) = @_;
$html = Jcode->new( $html )->utf8;#ここついか
my @ret;
foreach( split( /<br>/, $html ) )
{
if( $_ =~ /<div class="s">([\s\S]*)/g )
{
my $str = $1;
open(OUT,"> googlefile.txt");
print OUT "$_";
close(OUT); #この3行追加↑↑
$str = Jcode->new( $str )->utf8;#ここついか
my @data = &mecapi::main( $str );
@data = Jcode->new( @data )->eucjp;#ここついか
foreach( @data )
{
if( ${ $_ }{ 'speech' } eq '名詞' )
{
push( @ret, ${ $_ }{ 'word' } );
}
}
last;
}
}
return @ret;
}
sub MakeUrl( $ )
{
my ( @words ) = @_;
@words = Jcode->new( @words )->utf8;#ここもついか
my $url = 'http://www.google.co.jp/search';#/searchを取る
$url .= '?';
my @data;
push( @data, 'hl=ja&source=hp&biw=913&bih=510' );
my $word = join( ' ', @words );
$word = Jcode->new( $word )->utf8;#ここもついか
$word =~ s/ /+/g;
$word =~ s/(\W)/'%' . unpack('H2', $1)/eg;
push( @data, '&q=' . $word . '&um=1&ie=UTF-8&source=og&sa=N&tab=wi' );
$url .= join( '&', @data );
$url = Jcode->new( $url )->utf8;#ここもついか
return $url;
}

1;

補足日時:2011/01/26 04:45
    • good
    • 0

WWW::Mechanizeで



$mech->get( "http://www.google.com/search?q=" . $search_word );
my @links = $mech->find_all_links( class => 'l' );

この回答への補足

因みに、Perlは基本的な文法は勉強したのみで初心者です。
せっかく、回答いただいても理解できないので補足していただけると助かるのですが。

まことに恐縮ですが、宜しくお願いします。

補足日時:2011/01/24 17:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!