Google検索結果を取得する

2017年6月8日

google検索結果を取得するにはAPIを使う方法がありますが、
無料分は100クエリまでということですので、普通に検索結果から取得してみます。

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;
use Jcode;

my $search_word = 'perl';
# EUC -> UTF8 に変換 
# UTF8環境なので不要 # $search_word = jcode($search_word,'euc')->utf8; 
# URLエンコード
$search_word =~ s/(\W)/'%' . unpack('H2', $1)/eg;
my $url = 'http://www.google.co.jp/search?hl=ja&q=' . $search_word . '&lr=';
# IE8のユーザーエージェントを設定
my $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)";

# HTMLの内容を取得する
my $ua = LWP::UserAgent->new('agent' => $user_agent);
my $res = $ua->get($url);
my $content = $res->content;

 

検索対象は「perl」です。
これでHTMLが取得できましたので、解析してみます。

検索結果のURLですが、h3タグの中に入っているようです。
これは「アキラ100%」で検索した時の1結果です 笑

<h3 class="r">
<a href="http://miyatarou.com/comedy/1830/"
onmousedown="return rwt(this,",",",’9′,’AFQjCNF250bPEXnKwY4wP87
kqyYbxC2DGg’,’WJCl1kI7irdVIrwPTPzpBw’,’0ahUKEwjgjYjS-KXUAhWF1
xQKHfk6CBIQFgheMAg’,",",event)">
アキラ100%はR-1も本当に履いてない?前張りの噂と女性芸能人の反応 …
</a>
</h3>

 

h3タグを@itemsに取得しておいて、
更にその中のaタグ、アトリビュートhrefの内容を表示しています。

# HTML::TreeBuilderで解析
my $tree = HTML::TreeBuilder->new;
$tree->parse($content);
my @items =  $tree->find('h3');
for (@items){
    my @a=$_->find('a');
    for ( @a ){
        print $_->attr('href')."\n";
    }
}

 

こんな風に結果が取れてきます。
一応取れているようですが、どういうわけか、ブラウザでアクセスした場合とちょっとHTMLが違うようです。

http://www.google.co.jp/search?hl=ja&q=perl&lr=
/url?url=https://ja.wikipedia.org/wiki/Perl&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFggYMAE&usg=AFQjCNFE5JzFlwzErpZQe11A64UIEV00eQ
/url?url=https://ja.wikipedia.org/wiki/Perl&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFggcMAI&usg=AFQjCNFE5JzFlwzErpZQe11A64UIEV00eQ
http://www.google.co.jp/url?url=http://www.kent-web.com/perl/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFggnMAM&usg=AFQjCNHhc6en3-laRPR7K7in8iUKP-cW6A
http://www.google.co.jp/url?url=http://www.kent-web.com/perl/chap1.html&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFggyMAQ&usg=AFQjCNFpd3GwJwVlNmN5jQZkTLWFb3iElg
http://www.google.co.jp/url?url=http://www.tohoho-web.com/wwwperl.htm&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFgg4MAU&usg=AFQjCNEK_m6bL32seOW2yV7O5n_HOvbn3Q
http://www.google.co.jp/url?url=http://www.perlplus.jp/perl/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFgg_MAY&usg=AFQjCNFOeqYEGczhLQs3ara6kPW-RBVR2Q
http://www.google.co.jp/url?url=http://www.perlplus.jp/perl/for/index5.html&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFghFMAc&usg=AFQjCNFa7DnOB-kZWA82-1S_RYhf1JbKHA
http://www.google.co.jp/url?url=http://d.hatena.ne.jp/perlcodesample/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFghLMAg&usg=AFQjCNFEwzKbRrMON3l7Ar4ivOUE2pluag
/url?url=https://www.ruby-lang.org/ja/documentation/ruby-from-other-languages/to-ruby-from-perl/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFghRMAk&usg=AFQjCNHvburk5b6rlKI6i47ruq295UtGow
http://www.google.co.jp/url?url=http://qiita.com/Arashi/items/f28035d81f98985fcf2b&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFghWMAo&usg=AFQjCNE-GuzMlb0ybPWXIF-ZirOoJAp1_g
http://www.google.co.jp/url?url=http://www.tryhp.net/perlcgi.htm&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFghcMAs&usg=AFQjCNG48V-2vCGPVwQ8zSxwISiAF4-jXQ

どういうわけか上記のURLの幾つかは接続不能です。

ついでに、検索結果一覧にある要約文を取得してみます。

 

spanタグのclass="st"の中に要約がはいっているようですので、以下のようにします。

@items =  $tree->look_down('class', 'st');
print $_->as_text."\n" for @items;

 

このように取れました。

Perl(パール)とは、ラリー・ウォールによって開発されたプログラミング言語である。実用 性と多様性を重 視しており、C言語やsed、awk、シェルスクリプトなど他のプログラミング 言語の優れた機能を取り入れている。ウェブ・アプリケーション、システム管理、 ...
Perlによる基礎入門ページです。初心者向けに分かりやすく解説します。
Perlによる初心者向け基礎入門ページです。サンプルコードを中心に、Perlの文法や 構文を学習します。
1997年2月3日 ... とほほのperl入門. トップ > とほほのperl入門. 概要編  倹erlとは  クソク」 酵 perlの バージョン  ク巐貉セ 歯 実行方法  ウ銚・惚 ファイル指定  カァオニエャオ卸ワ 拒 標準入力 読み込み型  エ・犧・ュ 隙 簡単な実行例  ーッー隹シーューヒエ擎、ーツ 甥 定数・変数・値.
プログラミング言語としてPerlを使った方法を学習される方を対象として、Perlによる プログラム記述方法を 確認していきます。PerlのプログラミングとしてはCGIとしてWWW サーバと連携した利用方法がよく使われます が、まず単独で動作するプログラムの作成  ...
foreach文はfor文と似た構文です。foreachは値の集合であるリストを指定すると、リスト に含まれる値の数だけ順に繰り返しを行います。(リストについては別のページで詳しく見 ていきます)。 foreach文の書式は次の ようになっています。 foreach 変数 (リスト){ ...
Perl学習サイト - サンプルコードPerl入門. Perlは「テキスト処理」「システム管理」「Web 開発」の三つの 分野で優れたプログラム言語です。 開発の現場でPerlが利用されている ことは多いので、ITエンジニアとしてぜひ基礎的なことをマスターしておきましょう。
Perlはすばらしい言語です。ドキュメントもすばらしいし、Perlコミュニティもすばらしい コミュニティです 。 しかし、言語はかなり大きく、間違いなく複雑です。 もっとシンプルで 直交的な言語や、最初から洗練さ れたオブジェクト指向の機能が組み込まれた言語を 求め ...
2016年9月16日 ... はじめにPHPerのぼくが、Perlを触った思い出に基本的なことを書いていこうと思います 。 というのも、毎回Google先生に聞くのもいいのですが無くなる記事も多くあるので自分 でまとめちゃおうという魂胆です(`・ω・´)ゞ初心者のぼくでも少しだけ ...
これらの問題をすべてカバーしてくれるのがPerl(以下Perl、パールと読む)言語です。 Perlは、テキストベー スで動作するコンパイラ言語ですので、作成するのはテキスト ファイルだけです。 このテキストページにアクセスがあればPerlが自動でコンパイルして 実行 ...

もしかすると、これだけでもある程度共起語が取れるかもしれません。