解析結果を見てみる

静岡、でグーグル検索した結果は以下の様なものです。

静岡県公式ホームページ ふじのくに総合トップページ
https://www.pref.shizuoka.jp/
静岡の観光スポットランキングTOP10 – じゃらんnet
http://www.jalan.net/kankou/210000/
静岡県 – Wikipedia
https://ja.wikipedia.org/wiki/%25E9%259D%2599%25E5%25B2%25A1%25E7%259C%258C
静岡 のニュース検索結果

静岡市ホームページ
http://www.city.shizuoka.jp/
ハローナビしずおか 静岡県観光情報公式ホームページ
http://hellonavi.jp/
@S[アットエス] | 静岡新聞SBSオフィシャルサイト
http://www.at-s.com/
絶対に行きたい!“静岡”のオススメ観光スポットランキングTOP40 …
https://retrip.jp/articles/5381/
静岡銀行
http://www.shizuokabank.co.jp/
富士山静岡空港
http://www.mtfuji-shizuokaairport.jp/

この中で、
・Wiki・・・スクレイピング不可
・静岡のニュース検索結果・・・ニュースについての検索の相対パスなので除去
の2つは除去しています。

これらのサイトからテキスト情報を抜き出して、

mecabコマンドに通し

TermExtractにかける(ex_mecab.plの実行)

という手順でおなじみですね。

とは言え、元々のテキストが結構大量になりまして、解析結果も2095行も出力されました。

なので、
・スコアが1000以上
かつ
・明らかにおかしなものを覗いた
のが以下のような感じでした。

観光スポット 8573.39
温泉 6995.03
伊豆 6942.60
スポット 6617.74
富士山 6481.85
観光 6333.73
体験 5508.25
グルメ 4738.28
情報 4603.37
浜松 3971.11
富士山静岡空港 3697.26
観光情報 3447.38
月 3439.74
観光スポット静岡 2958.55
プラン一覧 2780.55
日本 2673.95
静岡県内 2600.64
富士 2498.77
一覧 2300.66
イベント 2291.29
イベント情報 2121.40
一覧静岡 2106.79
熱海 1899.49
動物園 1872.21
公園 1651.76
写真 1628.00
下田 1624.81
施設 1609.97
旅 1583.92
温泉地 1576.92
観光スポット-静岡 1526.24
観光情報静岡 1501.26
静岡放送 1435.43
観光名所 1398.21
人気 1365.21
世界 1324.69
静岡新聞 1238.64
即時予約OK空き状況 1228.39
観光スポットランキングTOP 1207.21
富士山情報 1129.04
観光協会 1092.60
ホームページ 1067.39
世界遺産 1043.25
伊東 1008.17

右側の数値がスコアです。
結構良さげなキーワードが取れていると思います。

多すぎるので1000以上を見ましたが、
もっと下位のものも結構使えそうです。

今はちょっと手順が多いので、もう少し簡単にするのが次の課題ですかね。

検索結果のURL先のテキストをすべて読み込む(修正版)[Perl]

というわけで、修正版です。

これで、「静岡」という検索結果のURL先のテキストをすべて抜き出せます。

スパゲッティ的ではありますが、実現が第一ということで・・・。

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;
use Jcode;

# urlを指定する
# my $url = 'http://www.yahoo.co.jp';
my $search_word = '静岡';
# 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;

# HTML::TreeBuilderで解析
my $tree = HTML::TreeBuilder->new;
$tree->parse($content);

# DOM操作
my @items =  $tree->find('h3');
my @a;
my @urls;
for (@items){
    print $_->as_text."\n";
    @a=$_->find('a');
    for ( @a ){
        # print $_->attr('href')."\n";
        my $url = $_->attr('href');
        $url = urlget($url);
        print $url."\n";
        push( @urls , $url )if chkUrl($url);
    }
}
# 一覧の詳細
@items =  $tree->look_down('class', 'st');
print $_->as_text."\n" for @items;

#URLを1つずつ開く.
for (@urls){
    my $url=$_;
    print $url . "   ...get\n";
    my $res = $ua->get($url);
    my $content = $res->content;
    my $code = Jcode::getcode($content);
    if ( $code ne 'utf8' ){
        $content = Jcode::convert( $res->content ,"utf8" , $code);
    }
    $content=~ s/&/\xef\xbc\x86/g;
    $content=~ s/&/&/g;

    $tree->parse($content);
    my @items =  $tree->find('html');
    print $_->as_text."\n" for @items;
}

sub urlget{
    my $url=shift;
    if ( $url=~ /\?url\=(.*)\&rct/ ){
        return $1;
    }
    else{
        #return $url;
        return "";
    }
}

sub chkUrl{
    my $url=shift;
    if ( $url=~ /wikipedia\.org/ ){
        $url="";
    }
    return $url;
}

 

HTML::TreeBuilderでの文字化け対策

サンプルを作り特殊文字を含めてみて検証を行いました。

テストページ

そのままでテキストデータを取得します。

テストページ これはテストコンテンツです。 テストとは、英語のtestのカタカナ表記です。 試験、試す、 という意味です。 画像を表示できます。

このように取得できます。

前回の検証結果から、「’」を含めて試してみます。

a??a?1a??a??a??a?, a??a??a? ̄a??a?1a??a?3a?3a??a?3a??a?§a??a?? a??a?1a??a?¨a? ̄a??e?±ea?a?Rtesta?Ra?≪a??a?≪a??e!¨e¨?a?§a??a?? ec|e¨?a??ec|a??a??a?¨a??a??a??a?3a?§a??a?? c?≫a??a??e!¨c?oa?§a??a??a??a??

見事に化けました。

 

他のコードは?

こちらを参考にしました。
矢印 & 矢印に使える記号、使えそうな記号

試してみたところ・・・
ほとんどNG
というか
全部NGでした。
以下は大丈夫のようでした。

  • &
  • >
  • <
  •  

対策は?

&を&に変換してしまえばいいか?と考えました。
ところが、&を使った語句がありそうな気がします。

・トム&ジェリー
・タイガー&ドラゴン

ふ・・・古い・・・ちょっと他に思いつきませんでした^^;

ということで

  1. & → 全角&
  2. & → &

という順番で変換すれば良さそうです。

1.はこんな感じでいけます

$content=~ s/&/&/g;

 

が文字コードを使って書くとこうなります。

$content=~ s/&/\xef\xbc\x86/g;

Unicode対応 文字コード表

 

2.はこうです。

$content=~ s/&/&/g;

 

組み込むと以下のようになります。

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;
use Jcode;
# urlを指定する
my $url = 'http://retrip.jp/articles/5381/';
# IE8
my $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)";
# LWPを使ってサイトにアクセスし、HTMLの内容を取得する
my $ua = LWP::UserAgent->new('agent' => $user_agent);
my $res = $ua->get($url);
my $content = $res->content;
# 文字コードを調べる
my $code = Jcode::getcode($content);
if ( $code ne 'utf8' ){
    $content = Jcode::convert( $res->content ,'utf8' , $code);
}
# 特殊文字を変換する.
$content=~ s/&/\xef\xbc\x86/g;
$content=~ s/&/&/g;
# HTML::TreeBuilderで解析
my $tree = HTML::TreeBuilder->new;
$tree->parse($content);
# DOM操作
my @items =  $tree->find('html');
print $_->as_text."\n" for @items;

これでやっと文字化け無く取得できるようになりました。

HTML::TreeBuilderで文字化けしたので検証した

https://retrip.jp/
をHTML::TreeBuilderで解析しようとすると文字化けしてしまう。
headタグのみ
titleタグのみ
など絞るとOKなのですが、
html全体
bodyタグ内
を取得しようとすると文字化けとなってしまいます。

 

HTML5だから?

まずソースを見てみて、ちょっと違うと感じました。
見慣れないタグ
header
footer
section
というタグがありました。
これがどうやらhtml5らしいです。恥ずかしながらよく知りませんでした。
というわけで、html5だからダメなのでしょうか?

そこでごくごく簡単なサンプル
http://html5.imedia-web.net/sample/html5_sample1/html5_sample1.html
を取得してみたところ正常に取得できました。
どうやら原因は違うようです。

 

ソース内に使用できない文字があるのでは?

経験的にパーサーでエラーになる場合は文字の泣き別れが多いです。
3バイト文字や2バイト文字が1バイトで切れ
表示しない1バイト文字、いわゆるNull文字が残っている場合です。
htmlをブラウザで見ているとまったく気が付かないのですが、パーサーで解析不能となり落ちてしまうのです。

これを検証するには、
ソースの半分を消して

解析

4分の1を消して

解析


を繰り返します。
こうやってどの部分が存在すると解析が不能になるのかを絞り込んでいきます。

 

原因発覚!

そしてこれを繰り返して・・・とうとう判明しました!

’

これが

次へ’’

となっていました。
これを消すと解析可能となりましたので、これで間違い無いようです・・・。

 

’ってなに?

記号>のようです。
本来>だと思うのですが、微妙に違う特殊文字なのでしょうか・・・。

 

対策は・・・?

HTML::TreeBuilderを使うのならこの;’を削除するしかないですね。。。

せっかくなので、他にもダメになる特殊文字を探してみようと思います。

検索結果のURL先のテキストをすべて読み込む[Perl]

今まで作ったものをつなげただけです。

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;
use Jcode;

# urlを指定する
# my $url = 'http://www.yahoo.co.jp';
my $search_word = '静岡';
# 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)";

# LWPを使ってサイトにアクセスし、HTMLの内容を取得
my $ua = LWP::UserAgent->new('agent' => $user_agent);
my $res = $ua->get($url);
my $content = $res->content;

# HTML::TreeBuilderで解析
my $tree = HTML::TreeBuilder->new;
$tree->parse($content);

# DOM操作
my @items =  $tree->find('h3');
my @a;
my @urls;
for (@items){
    print $_->as_text."\n";
    @a=$_->find('a');
    for ( @a ){
        # print $_->attr('href')."\n";
        my $url = $_->attr('href');
        $url = urlget($url);
        print $url."\n";
        push( @urls , $url )if chkUrl($url);
    }
}
# 一覧の詳細
@items =  $tree->look_down('class', 'st');
print $_->as_text."\n" for @items;

 

Wikipediaはこのやり方では読み込めない仕組みになっています。
あと、グーグルの相対パスも読み込まないようにします。
2つサブルーチンを作って対応しました。

sub urlget{
    my $url=shift;
    if ( $url=~ /\?url\=(.*)\&rct/ ){
        return $1;
    }
    else{
        return "";
    }
}

sub chkUrl{
    my $url=shift;
    if ( $url=~ /wikipedia\.org/ ){
        $url="";
    }
    return $url;
}

 

そして、すべての検索結果URLを読み込みます。

ちょっとスパゲッティ的ですが、続けて読み込み処理をつけました。

#URLを1つずつ開く.
for (@urls){
 my $url=$_;
 print $url . " ...get\n";
 my $res = $ua->get($url);
 my $content = $res->content;
 my $code = Jcode::getcode($content);
 if ( $code ne 'utf8' ){
     $content = Jcode::convert( $res->content ,"utf8" , $code);
 }
 $tree->parse($content);
 my @items = $tree->find('html');
 print $_->as_text."\n" for @items;
}

これでうまく行ったか・・・?
と思いきや途中から激しく文字化けをしました。

具体的には
https://retrip.jp/articles/5381/
を読み込むとそうなってしまいます。
試しにトップページも試しましたが、同じでした。

HTMLそのものは文字化けしていないのですが、TreeBuilderで解析すると文字化けしてしまいます。

次回はそこを掘り下げていきます。

文字コードを自動的にチェックしてテキストを取得する[perl編]

実は文字コードは、かなり色々あるのですが、基本的には3つです。

  • ShiftJIS
  • UTF-8
  • EUC-JP

ですね。
個人的にはEUC-JPが好みですが、
世の中のUTF-8化の流れには逆らえませんね・・・。
ShiftJISはWindowsがしつこく使用しているので無くなりそうにありません。

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;
use Jcode;

# urlを指定する
my $url = 'https://www.pref.shizuoka.jp/';
#my $url = 'http://www.jalan.net/kankou/210000/';
# IE8
my $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)";
# LWPを使ってサイトにアクセスし、HTMLの内容を取得する
my $ua = LWP::UserAgent->new('agent' => $user_agent);
my $res = $ua->get($url);
my $content = $res->content;
# 文字コードを調べる
my $code = Jcode::getcode($content);
if ( $code ne 'utf8' ){
    $content = Jcode::convert( $res->content ,'utf8' , $code);
}
# HTML::TreeBuilderで解析
my $tree = HTML::TreeBuilder->new;
$tree->parse($content);

# DOM操作
my @items =  $tree->find('html');
print $_->as_text."\n" for @items;

 

具体的に見てみましょう。
まず文字コードをチェックします。

my $code = Jcode::getcode($content);

UTF8の場合には変換しなくていいので、UTF8以外のときだけ変換するようにします。

if ( $code ne 'utf8' ){
    $content = Jcode::convert( $res->content ,'utf8' , $code);
}

変換元の文字コードを第3引数に入れています。
第3引数は省略できるのですが、たまにうまく変換できないことがあるため、入れています。

URL内のテキストをすべて抜き出すには[Perl編]

URLを抽出できるようになったので、次にそのURLのテキストを抜き出してみます。
実際には無駄な部分も取得されてしまうと思いますが・・・。

まずはこんな感じにして取得してみました。

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;
use Jcode;

# urlを指定する
my $url = 'https://www.pref.shizuoka.jp/';
# my $url = 'http://www.jalan.net/kankou/210000/';
print $url."\n";
# IE8
my $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)";

# LWPを使ってサイトにアクセスし、HTMLの内容を取得する
my $ua = LWP::UserAgent->new('agent' => $user_agent);
my $res = $ua->get($url);
my $content = $res->content;

# HTML::TreeBuilderで解析
my $tree = HTML::TreeBuilder->new;
$tree->parse($content);

# DOM操作
my @items =  $tree->find('html');
print $_->as_text."\n" for @items;

 

このように取得できました。

静岡県公式ホームページ ふじのくに総合トップページ このサイトではJavaScriptを使用したコンテンツ・ 機能を提供しています。JavaScriptを有効にするとご利用いただけます。 本文へスキップします。静岡県 文字サイズ・色合い変更音声読み上げふりがなふりがな非表示Other languageサイトマップ メニュー ここから本文です。緊急情報 水難事故注意報の発令(6月1日?6月30日)北朝鮮の「弾道ミサイル」に係る本県の対応 県政情報 総合案内、電子行政サービス、ようこそ知事室へ、県へのご意見、県の広報、採用情報、入札情報など ふじのくに魅力情報 観光情報、グルメ、食材、静岡に暮らす、富士山ガイド、富士山静岡 空港など ライブカメラ富士山ビュー 県庁へのアクセス各種お問い合わせ 著作権・リンクについて個 人情報保護についてユニバーサルデザインに配慮したページ 〒420-8601 静岡県静岡市葵区追手町9番6号 電話番号(県庁案内):054-221-2455 Copyright ・hizuoka Prefecture. All Rights Reserved.

割と良いかも?と思いましたが
JavaScriptを有効にするとご利用いただけます。
てなっていますね。これは仕方ないですかね・・・

JavaScriptの部分はグーグルでも拾えていないとおもいますし。

次に、2件目の
http://www.jalan.net/kankou/210000/
をやりますと、盛大に文字化け・・・。
見てみると、「ShiftJIS」ですね。

とりあえず、取得の部分を以下のように変更ました。

my $content = Jcode::convert( $res->content ,"utf8" , "sjis");

この書き方で「ShiftJIS から UTF8 に」となります。
感覚的には逆ですよね。。。

 

静岡の観光スポットランキングTOP10 – じゃらんnet 国内の観光スポット・イベント情報はじゃらんnetじゃらん PRODUCED BY RECRUIT 日本最大級の宿・ホテル予約サイト予約照会・変更・キャンセルマイページ 宿・ホテル予約出張ビジネス温泉・露天高級宿日帰り・デイユース じゃらんパック(交通+宿泊)遊び・体験予約観光ガイド旅行ガイド 観光ガイド ご当地グルメガイド イベントガイド お土産ガイド みんなの旅行記 ツアーレンタカー高速バス航空券 海外ホテル海外航空券航空券+ホテル 観光ガイド旅行ガイド観光ガイドご当地グルメガイドイベントガイドお土産ガイドみんなの旅行記 海外ツアーはエイビーロードサイトのご利用 方法ヘルプ/問い合わせ 観光ガイド> 静岡の観光 ようこそ、ゲストさん(ログイン)新規会員登録 静岡の観光スポット静岡県での観光となると誰もが真っ先に思いつくスポットが霊峰富士山だろう。世界遺 産にも指定されている富士山近隣には村山浅間神社や須山浅間神社など所縁ある寺社も多く、富士信仰の歴史文化も垣間見ることができる。熱海市や伊豆市は国内屈指の温泉街のため年間を通して多くの旅行者が足を運んでいる。また、天下を統一した徳川家康の居城としても知られる駿府城や浜松城などの城郭も目にすることができる。・・・・・・・

今度はかなり長く取れました。
実はもっともっと長いです。

次はエンコードチェックを自動にして、10件のURLを一気に処理するようにしてみます。

Google検索結果のURLを整形する

url=[ここを取得]&rct
の ここ のみを取得します。

というわけでこんなサブルーチンを作ってみました。

sub urlget{
    my $url=shift;
    if ( $url=~ /\?url\=(.*)\&rct/ ){
        return $1;
    }
    else{
        return $url;
    }
}

 

ほんで、取得・・・

静岡県公式ホームページ ふじのくに総合トップページ
https://www.pref.shizuoka.jp/
静岡県 – Wikipedia
https://ja.wikipedia.org/wiki/%25E9%259D%2599%25E5%25B2%25A1%25E7%259C%258C
静岡の観光スポットランキングTOP10 – じゃらんnet
http://www.jalan.net/kankou/210000/
ハローナビしずおか 静岡県観光情報公式ホームページ
http://hellonavi.jp/
静岡 のニュース検索結果
/search?q=%E9%9D%99%E5%B2%A1&lr=&hl=ja&prmd=ivnsm&source=univ&tbm=nws&tbo=u&sa=X&ved=0ahUKEwjtxcLm0q_UAhXITrwKHQjbBVwQqAIILA
静岡市ホームページ
http://www.city.shizuoka.jp/
絶対に行きたい!“静岡”のオススメ観光スポットランキングTOP40 …
https://retrip.jp/articles/5381/
@S[アットエス] | 静岡新聞SBSオフィシャルサイト
http://www.at-s.com/
しずおか観光情報 駿府静岡市 最高の体験と感動を
http://www.visit-shizuoka.com/
静岡銀行
http://www.shizuokabank.co.jp/

おや・・・一つ変なのがあります。

静岡 のニュース検索結果
/search?q=%E9%9D%99%E5%B2%A1&lr=&hl=ja&prmd=ivnsm&source=univ&tbm=nws&tbo=u&sa=X&ved=0ahUKEwjtxcLm0q_UAhXITrwKHQjbBVwQqAIILA

 

これって、「googleの検索結果が」検索結果に出ているってことみたいですね。
相対パスになります。

ので

https://www.google.co.jp/search?q=%E9%9D%99%E5%B2%A1&lr=&hl=ja&prmd=ivnsm&source=univ&tbm=nws&tbo=u&sa=X&ved=0ahUKEwjtxcLm0q_UAhXITrwKHQjbBVwQqAIILA

とするのが正しそうです。

ですが、いまは共起語の取得のためですから、
このURLは除外してしまっても良いかもしれません。

除外、とすることにします。

sub urlget{
    my $url=shift;
    if ( $url=~ /\?url\=(.*)\&rct/ ){
        return $1;
    }
    else{
        return "";
    }
}

 
こうすると、マッチしないときには空を返すようになりますね。

Google検索結果を検証。必要なURLだけ取得したい。

perlで取得した結果がなんか変だったので確かめてみます。

 

改めまして、「静岡」で検索しました。

静岡県公式ホームページ ふじのくに総合トップページ
/url?url=https://www.pref.shizuoka.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggUMAA&usg=AFQjCNHGdMpNPtlQnLHiWYBYSVwHLO1B2Q
静岡の観光スポットランキングTOP10 - じゃらんnet
http://www.google.co.jp/url?url=http://www.jalan.net/kankou/210000/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggaMAE&usg=AFQjCNE4cTfOF0wUbD7JkGe1RrC_av9otw
静岡県 - Wikipedia
/url?url=https://ja.wikipedia.org/wiki/%25E9%259D%2599%25E5%25B2%25A1%25E7%259C%258C&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFgggMAI&usg=AFQjCNHykSNFBk5JnwvoeAFIVeLWCI0zNw
静岡市ホームページ
http://www.google.co.jp/url?url=http://www.city.shizuoka.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggmMAM&usg=AFQjCNGudOxgX6qLRsXvbJtK5vFSfzfpog
ハローナビしずおか 静岡県観光情報公式ホームページ
http://www.google.co.jp/url?url=http://hellonavi.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggsMAQ&usg=AFQjCNGU_HMOAGgIQVuPN5-3QhWJVLBkfw
絶対に行きたい!“静岡”のオススメ観光スポットランキングTOP40 ...
/url?url=https://retrip.jp/articles/5381/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggyMAU&usg=AFQjCNHnhe4qy_m68DO5BpCf_9TGgUy4JQ
@S[アットエス] | 静岡新聞SBSオフィシャルサイト
http://www.google.co.jp/url?url=http://www.at-s.com/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFgg5MAY&usg=AFQjCNE23oUpCnBS0o8w4kCqUr-2h1zDyg
静岡銀行
http://www.google.co.jp/url?url=http://www.shizuokabank.co.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFgg_MAc&usg=AFQjCNEBmOgVkUxIxApdGuYanF1wSyaX6Q
しずおか観光情報 駿府静岡市 最高の体験と感動を
http://www.google.co.jp/url?url=http://www.visit-shizuoka.com/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFghFMAg&usg=AFQjCNFG0tL7qh0Pox9xAwuEbfDdi1jGiA
静岡大学:トップページ
http://www.google.co.jp/url?url=http://www.shizuoka.ac.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFghLMAk&usg=AFQjCNFiJHo-BZx3TzNKZJot5_Y-HFaXcA

 

実際にブラウザから検索してみました。
上から3件ですが、以下のようになっていました。

静岡県公式ホームページ ふじのくに総合トップページ
https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggnMAA&url=https%3A%2F%2Fwww.pref.shizuoka.jp%2F&usg=AFQjCNGQOwfv93PFx9bbQv8t6qbPwwJdpA&sig2=25OMRKGO_9No4H9r1UlY-A

静岡の観光スポットランキングTOP10 - じゃらんnet
https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggtMAE&url=http%3A%2F%2Fwww.jalan.net%2Fkankou%2F210000%2F&usg=AFQjCNHWDzurqyzxpvyf-X7pL4EBkk4a0w&sig2=HFDrxBA552FM4ObWVxP9aw

静岡市ホームページ
https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggzMAI&url=http%3A%2F%2Fwww.city.shizuoka.jp%2F&usg=AFQjCNF4FIjZYBGomvMRfmGA7MjBDElrXQ&sig2=2tD8x-R-fDPW52DwJOqE7Q

 

ブラウザと比較してみました。

静岡県公式ホームページ ふじのくに総合トップページ
[perl] /url?url=https://www.pref.shizuoka.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggUMAA&usg=AFQjCNHGdMpNPtlQnLHiWYBYSVwHLO1B2Q
[ブラウザ] https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggnMAA
&url=https%3A%2F%2Fwww.pref.shizuoka.jp%2F&usg=AFQjCNGQOwfv93PFx9bbQv8t6qbPwwJdpA&sig2=25OMRKGO_9No4H9r1UlY-A
[実際につながるページ] https://www.pref.shizuoka.jp/

静岡の観光スポットランキングTOP10 - じゃらんnet
[perl] http://www.google.co.jp/url?url=http://www.jalan.net/kankou/210000/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggaMAE&usg=AFQjCNE4cTfOF0wUbD7JkGe1RrC_av9otw
[ブラウザ] https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggtMAE
&url=http%3A%2F%2Fwww.jalan.net%2Fkankou%2F210000%2F&usg=AFQjCNHWDzurqyzxpvyf-X7pL4EBkk4a0w&sig2=HFDrxBA552FM4ObWVxP9aw
[実際につながるページ] http://www.jalan.net/kankou/210000/

静岡市ホームページ
[perl] http://www.google.co.jp/url?url=http://www.city.shizuoka.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggmMAM&usg=AFQjCNGudOxgX6qLRsXvbJtK5vFSfzfpog
[ブラウザ] https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggzMAI
&url=http%3A%2F%2Fwww.city.shizuoka.jp%2F&usg=AFQjCNF4FIjZYBGomvMRfmGA7MjBDElrXQ&sig2=2tD8x-R-fDPW52DwJOqE7Q
[実際につながるページ] http://www.city.shizuoka.jp/

リンクを実際に開くと短くなりますね。
というかグーグルを一旦経由してクリック数などをグーグルに送信する仕組みになっているのでしょうね。
perlもブラウザも
url= の後、と言うのは共通ですね。
でも終端が違いますね。

[perl] &rct=
[ブラウザ] &usg=
まで、ということでしょうか。

perlですから、

url=[ここを取得]&rct

とすれば取得できそうです。

Google検索結果を取得する

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が自動でコンパイルして 実行 ...

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