スクレイピング|WEBサイトのページを読み取る方法
スクレイピング|WEBサイトのページを読み取る方法
ウェブスクレイピングは、ウェブサイトから情報を抽出すること。
別名、ウェブ・クローラーあるいはウェブ・スパイダーとも呼ばれる
つまりWEBサイトのページを読み取る方法です。
WEBページをソフトウェア、プログラムで読み取ることは別に大したことじゃないのですが、
なんせプログラムのやることですから、短い時間内にガンガンアクセスが入るわけです。
それが特定のサイトのページ全部とかやられると読み取られる側のサーバーはたまったもんじゃありません。
したがってスクレイピングというと嫌われるとか悪いことのように言われますが、WEBシステムの開発ではかなり使われる手法です。
グーグルのツールなども多用してますよね?
ボタン押すとくるくるとなるやつ。あれはスクレイピングのぎじゅを使っているわけです。
ただし、自分のサイトに対してね。
CGIのアクションのように画面をそのままの状態にして裏で情報を読み込むという点で、実はかなり使われている手法です。
アクションをもらって読み取る方法があります。
いろいろありますけど、phpQuery-onefile がそれです。
解凍したら、使用するサイトにphpQuery-onefile.php をアップロードします。
これだけです。
あとは $html に入っているデータから必要なデータを抜き出せばおしまいです。
perl でも出来ますけど、今のところ ssl のページを読み込める簡単なモジュールが出ていないのでperlでやりたい場合は、php を呼び出す方法で実現するのが手っ取り早いかと思います。
なんせページがスマートですからね。
方法はいたって簡単。
以下のひな形は、▼ボタンを押すと情報を表示するエリアが開きWEBサイトから読み取った情報をそこに掲載します。
▼ボタンは、Xボタンに変わり、Xボタンを押すと情報の表示エリアが閉じて再び▼ボタンに切り替わります。
ついでなので jquery での css の書き換えもついています。
データのメンテナンスも考慮して、情報を拾い出したときのURLも書いておきます。
複数行に対応してあります。WEBページを読み込んでいる間ぐるぐるGIFを表示させています。
必要なところだけ生かしてください。
受け側 myplugin.php
ウェブスクレイピングは、ウェブサイトから情報を抽出すること。
別名、ウェブ・クローラーあるいはウェブ・スパイダーとも呼ばれる
つまりWEBサイトのページを読み取る方法です。
ウェブスクレイピングはWEBページを読み取る技術のことで悪いことではない
WEBページをソフトウェア、プログラムで読み取ることは別に大したことじゃないのですが、
なんせプログラムのやることですから、短い時間内にガンガンアクセスが入るわけです。
それが特定のサイトのページ全部とかやられると読み取られる側のサーバーはたまったもんじゃありません。
したがってスクレイピングというと嫌われるとか悪いことのように言われますが、WEBシステムの開発ではかなり使われる手法です。
グーグルのツールなども多用してますよね?
ボタン押すとくるくるとなるやつ。あれはスクレイピングのぎじゅを使っているわけです。
ただし、自分のサイトに対してね。
CGIのアクションのように画面をそのままの状態にして裏で情報を読み込むという点で、実はかなり使われている手法です。
WEBサイトの情報を読み取る方法
WEBサイトを読み込む方法として、プログラムの流れ上で読み取る方法、アクションをもらって読み取る方法があります。
プログラムの中からWEBサイトを読み取る方法
プログラムの中からWEBサイトを呼び出すには、phpQueryを使います。phpQueryを使う
phpQueryの公式サイトから phpQuery-onefile.php をダウンロードしてきます。いろいろありますけど、phpQuery-onefile がそれです。
解凍したら、使用するサイトにphpQuery-onefile.php をアップロードします。
require_once("./phpQuery-onefile.php"); $html = file_get_contents($url); echo $html;
これだけです。
あとは $html に入っているデータから必要なデータを抜き出せばおしまいです。
perl でも出来ますけど、今のところ ssl のページを読み込める簡単なモジュールが出ていないのでperlでやりたい場合は、php を呼び出す方法で実現するのが手っ取り早いかと思います。
スポンサーリンク
javascript からCGIを呼び出してWEBサイトの読み取る方法
一番、出回っているのがこの方法です。なんせページがスマートですからね。
方法はいたって簡単。
以下のひな形は、▼ボタンを押すと情報を表示するエリアが開きWEBサイトから読み取った情報をそこに掲載します。
▼ボタンは、Xボタンに変わり、Xボタンを押すと情報の表示エリアが閉じて再び▼ボタンに切り替わります。
ついでなので jquery での css の書き換えもついています。
データのメンテナンスも考慮して、情報を拾い出したときのURLも書いておきます。
複数行に対応してあります。WEBページを読み込んでいる間ぐるぐるGIFを表示させています。
必要なところだけ生かしてください。
// php 始まり // --- 開いていたらWEBサイトから情報を読み込む --- $n = 0; $style = ""; : $intag = ''; $btnmrk= '▼'; require_once(dirname(__FILE__)."/lib/phpQuery-onefile.php"); if($_POST['open_#userarea'.$n]!=''){ $intag = get_web($_POST['open_#userarea'.$n]); preg_match('/<body>([\s\S]*?)<\/body>/', $html, $inblock); if($intag!=''){ $intag.= '<input type="hidden" name="open_#userarea'.$n.'" id="open_open_#userarea'.$n.'" value="'.$_POST['open_#userarea'.$n].'">'; $btnmrk= '×'; } } // php 終わり // --- ボタンと表示エリア --- <input type="button" id="button<?php echo $n?>" name="button<?php echo $n?>"value="<?echo $btnmrk; ?>" OnClick="<?php echo $user_btn_Click; ?>" style="<?php echo $style; ?>"> <div id="userarea<?php echo $n?>" style="margin:0;padding:0;"><?php echo $intag; ?></div>
function view_users_java() { $guruguru_image = plugin_dir_url( __FILE__ ).'img/indicator.gif'; ?> <script> <!-- function webcgi(fil,cmd,pm1,pm2,smbl,butn) { var url; var text; var reg=/<body>([\s\S]*?)<\/body>/; var data; if( $(butn).val()=='×' ){ $(butn).val("▼"); $(butn).css('font-size', '10px'); $(smbl).html(""); $(smbl).css('margin' , '0px'); $(smbl).css('padding' , '0px'); }else{ url='<?php echo plugins_url(); ?>'+'/myplugin/myplugin.php?'; url=url+'cmd='+cmd+'&'; url=url+'pm1='+pm1+'&'; url=url+'pm2='+pm2+'&'; url=url+'fil='+fil+'&'; optn = '<input type="hidden" name="open_'+smbl+'" id="open_'+smbl+'" value="'+url+'">'; //alert('url='+url); $(smbl).html('読込中…<img src="<?php echo $guruguru_image; ?>">'); $.get(url, function(data) { retn=data.match(reg)[1]; $(butn).val("×"); $(butn).css('font-size', '12px'); $(smbl).html(retn+optn); // $(smbl).css('margin' , '10px'); $(smbl).css('padding', '5px 0'); }).done(function() { //alert( "second success" ); }).fail(function() { alert('読み込みに失敗しました。\nサーバーやネット環境、パソコンの状態によるものと思われます。\n時間をおいて再度試してください。'); $(smbl).html(''); }).always(function() { //alert( "finished" ); }); } } --> </script>
受け側 myplugin.php
// --- php はじまり --- $arg_line = ''; foreach($_GET as $key=>$vvv){ $arg_line.= $key.'='.$vvv."<br />\n"; } if($_GET['cmd']=='test'||$_GET['cmd']==''){ $data = ''; $data.= 'TEST<br />'."\n"; $data.= $arg_line; return_view($data); }if($_GET['cmd']=='get_usermant'){ $data = ''; $data.= 'USER MENT FORM<br />'."\n"; $data.= $arg_line; return_view($data); }if($_GET['cmd']=='usercount'){ $data = usercount(); return_view($data); } function return_view($data) { // --- php 終わり --- <!DOCTYPE html> <!--[if IE 8]> <html xmlns="http://www.w3.org/1999/xhtml" class="ie8 wp-toolbar" lang="ja"> <![endif]--> <!--[if !(IE 8) ]><!--> <html xmlns="http://www.w3.org/1999/xhtml" class="wp-toolbar" lang="ja"> <!--<![endif]--> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title> </title> </head> <body> <?php echo $data; ?> </body> </html>
スポンサーリンク