EXEファイルのショートカットから起動するといつもこうなる。
原因: 以下の複合要因です
- 起動時はテキストファイルが開かれるが、
- その際にテンプレートファイルを使う設定になっている
- そのテンプレートファイルのパスがおかしい。おそらくディレクトリを指定してしまっているなど。
対処方法:
テンプレートファイルを使う設定にしない
手順:
これでOK
#b-navbar { height:0px; display:none; visibility:hidden; }
<?php
/* 利用例:sample
$val = fetch_val_from_URL_ver3 (
"http://www.yahoo.com/",
"/lang=\"([\s\S]+?)\"/i"
);
print_r ( $val ) ; //en-US
print "<br />";
$array= fetch_val_from_URL_ver3 (
"",
"/lang=\"([\w\-]+?)\"[\s\S]+?<title>([\s\S]+?)<\/title>/i"
);
print_r ( $array ) ; //Array ( [0] => [1] => en-US [2] => Yahoo )
print "<br />";
*/
function fetch_val_from_URL_ver3 ( $CRON_URL , $REGEX_val ) {
/*
★メモ:
・日本語を正規表現に含む場合は、UTF8でコードを書いて下さい。
それ以外は、関数の中のUTF-8に統一している箇所を修正してください。
・改行コードは正規表現が面倒になるので取得後に、一律削除しています。
★引数;
・CRON_URL は"http://~"からいれてください。
・CRON_URL を 空欄"" にすると、前回呼び出したHTMLを再利用します。
※ そのため、 $fv_global_html はグローバル変数名です。
・REGEX_val は正規表現です。
日本語を正規表現に含む場合は、UTF8で表現式を書いて下さい。
★返り値:
・REGEX_val の正規表現で、(かっこ) で囲った表現部分を抽出して、値または配列を返します。
・REGEX_val の (かっこ)が1個の時は、値を返します。2個以上の時は、配列を返します。
★バグシューティング:
・関数を記述しているPHPファイル は UTF-8 ですか? (スクレイプの対象ページの文字コードは関係ありません。
関数の中の mb_convert_encoding 処理で UTF8 に固定処理をしているからです。
もしこの関数を、UTF-8以外のスクリプトで記述する場合は、関数内のmb_convert_encoding部分を修正して下さい )
・正規表現は正しいですか? regexpal.com が便利ですよ。
・正規表現に、タグの </ があるときは 「<\/」にエスケープしてください
・この関数内で、$fv_global_html という変数名をグローバルとして利用しています。
★ヒント
・相手先のサーバーのためにも、同じページを何度も呼ばないようにしましょう。
CRON_URLを 空欄""にすると、前回呼び出した時のHTMLを再利用できます。
・改行を含む任意の一文字は [\s\S] 、 数値は ([\-\d\.\,]+?) を使うといいでしょう。
・UserAgentを変えるとこともできます
★その他
・無保証で無責任です。目的にかかわらず、自由に改変して利用できます。
クレジット表記や、連絡は不要です。
・バグ等のご連絡 は、sakai[-_atmark_-]quel.jp へ
・Programmed by Hiroyuki.Sakai, Infolio,inc.
*/
//設定
global $fv_global_html;
$flg_ReUse_contents = false;
unset($ary_match);
//取得
if ( $CRON_URL == "" ) {//urlがヌルの時は ReUse_contents をtrueに
$flg_ReUse_contents = true;
}
if ( $flg_ReUse_contents == true ) {
//$fv_global_htmlはそのまま再利用
if ( $fv_global_html =="" ) {//空かどうかのチェックだけ行う
print "No data URL:E:001 $CRON_URL ";
print "<br /> " ;
return false ;
}
}else {
//新規取得
//接続準備
$options = array(
'http' => array(
'method' => 'GET',
'header' => 'User-Agent: Mozilla/5.0 ( PHP fetch-val-from-URL-ver3 ) ',
),
);
$context = stream_context_create($options);
//取得
$fv_global_html = file_get_contents( $CRON_URL, false, $context);
$fv_global_html = str_replace ("\r\n","\n",$fv_global_html);
$fv_global_html = str_replace ("\r","\n",$fv_global_html);
//UTF8に統一する
$fv_global_html = mb_convert_encoding ($fv_global_html,"UTF-8",mb_detect_encoding($fv_global_html));
unset ( $context ) ;
}
//改行は正規表現が面倒になるので一律削除 (このブロックが不要であればコメントアウトしてください)
$fv_global_html = str_replace("\r","",$fv_global_html ) ;
$fv_global_html = str_replace("\n","",$fv_global_html) ;
//抽出
preg_match( $REGEX_val , $fv_global_html ,$ary_match );
//マッチがないとき
if ( isset($ary_match[1]) ) {
} else {
$val = "" ;
print "Nomatch E:003 <br />$REGEX_val<br />in $CRON_URL ";
print "<br /> " ;
return false ;
}
//数字ならばカンマ削除
$ary_match = array_map ( function ( $vn ) {
if ( preg_match("/[\d\.\,\/\s]+?/", $vn) ) {
return str_replace ( "," , "" , $vn ) ;
}else {
return $vn ;
}
} , $ary_match );
//配列か変数値を返す
if ( count($ary_match) == 2 ) {
return $ary_match[1];
}else {
$ary_match[0]=NULL;
return $ary_match;
}
}
?>
Search Keyword:
php, function, scraping , scraper class