HTML,CSS,PHP,ワードプレスカスタマイズ 技術情報資料

スクレイピング|WEBサイトのページを読み取る方法

スポンサーリンク

スクレイピング|wwwサイトのページを読み取る方法

ウェブスクレイピングは、ウェブサイトから情報を抽出すること。
別名、ウェブ・クローラーあるいはウェブ・スパイダーとも呼ばれる
つまりwwwサイトのページを読み取る方法です。


ウェブスクレイピングはwwwページを読み取る技術のことで悪いことではない



wwwページをソフトウェア、プログラムで読み取ることは別に大したことじゃないのですが、
なんせプログラムのやることですから、短い時間内にガンガンアクセスが入るわけです。

それが特定のサイトのページ全部とかやられると読み取られる側のサーバーはたまったもんじゃありません。

したがってスクレイピングというと嫌われるとか悪いことのように言われますが、wwwシステムの開発ではかなり使われる手法です。

グーグルのツールなども多用してますよね?

ボタン押すとくるくるとなるやつ。あれはスクレイピングのぎじゅを使っているわけです。
ただし、自分のサイトに対してね。

CGIのアクションのように画面をそのままの状態にして裏で情報を読み込むという点で、実はかなり使われている手法です。


wwwサイトの情報を読み取る方法


wwwサイトを読み込む方法として、プログラムの流れ上で読み取る方法、
アクションをもらって読み取る方法があります。

プログラムの中からwwwサイトを読み取る方法


プログラムの中からwwwサイトを呼び出すには、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を呼び出してwwwサイトの読み取る方法


一番、出回っているのがこの方法です。
なんせページがスマートですからね。

方法はいたって簡単。

以下のひな形は、▼ボタンを押すと情報を表示するエリアが開きwwwサイトから読み取った情報をそこに掲載します。
▼ボタンは、Xボタンに変わり、Xボタンを押すと情報の表示エリアが閉じて再び▼ボタンに切り替わります。

ついでなので jquery での css の書き換えもついています。
データのメンテナンスも考慮して、情報を拾い出したときのURLも書いておきます。
複数行に対応してあります。wwwページを読み込んでいる間ぐるぐるGIFを表示させています

必要なところだけ生かしてください。
		// php 始まり
		// --- 開いていたらwwwサイトから情報を読み込む ---
		$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>


スポンサーリンク

スポンサーリンク

よく使うタグ

・float クリア
<br clear="all"><div style="clear:both;" class="clearfix"></div>
・角丸め
round-radius
border-radius:5px; -webkit-border-radius:10px; -moz-border-radius:10px;
・div box
overflow:scroll;min-width:300px;max-width:300px;min-height:300px;max-height:300px;
・TEXTAREAリサイズ
resize: vertical;
・サイトURL
home_url() // http://…
if(site_url()==home_url){
$shorturl_yuzu_path = substr(ABSPATH,0,strpos( ABSPATH, substr(site_url(),strlen(home_url()) ) ) ).’/’;
}else{
$shorturl_yuzu_path = ABSPATH.’/’;
}
// /var/…
・WP HOME URL
site_url() // http://…/wp
ABSPATH // /var/…/wp
・プラグイン(自分のDIR追加必要)
plugins_url() // http://…/plugins
WP_PLUGIN_URL // http://…/plugins
WP_PLUGIN_DIR // /var/…/plugins
・使用中のテーマ
get_template_directory_uri() // http://…/theme/xx
get_template_directory() // /var/…/theme/xx
・wp-content
content_url() // http://…/wp-content
WP_CONTENT_DIR // /var/…/wp-content
・画像URLからDIR変換
$pctdir=str_replace(content_url(), WP_CONTENT_DIR,$pcturl);
・パス名分解
$pathData = pathinfo($file);
echo $pathData["dirname"]; // /var/~
echo $pathData["filename"]; // xxx
echo $pathData["extension"]; // txt
echo $pathData["basename"]; // xxx.txt
・画像サイズ
list($width,$height) = getimagesize($url);
if(has_post_thumbnail()){
$thumbnail_id = get_post_thumbnail_id();
$thumbnail_img = wp_get_attachment_image_src( $thumbnail_id , ‘full’ );
$src = $image[0]; //url
$width = $image[1]; //横幅
$height = $image[2]; //高さ
・画像サイズ比率
list($src_w,$src_h) = getimagesize($file);
$dst_w = 600;$dst_h = 0;
$dst_h = ($dst_w!=0)?(intval(($src_h*$dst_w)/$src_w )):(($dst_h!=0)?(intval(($src_w*$dst_h)/$src_h)):0);
・疑似要素順
link visited hover active


特殊文字
シングルクォート : &#39;
ダブルクォート : &quot;
WP設定内表示前処理(htmlタグ許可項目)
$str = str_replace(‘<','&lt;' ,$str);
$str = str_replace(‘>’,’&gt;’ ,$str);
$str = str_replace(‘\”‘,’&quot;’,$str);
$str = str_replace(“\'”,’&#39;’ ,$str);
WO設定項目表示前処理(htmlタグ許可項目)
$str = str_replace(‘\”‘,'”‘,$str);
$str = str_replace(“\'”,”‘”,$str);
・テーマ
get_theme_root_uri()
get_theme_root()
・WP 情報
get_bloginfo( $show )
・Wp config FTP 情報 設置
define( ‘FTP_HOST’, ‘host’ );
define( ‘FTP_USER’, ‘id’ );
define( ‘FTP_PASS’, ‘pw’ );
define( ‘FTP_SSL’, false );
弾に使う
placeholder:ユーザー入力補助

カテゴリー

FB 広告 最適化~グーグルアナリティクスとサーチコンソールの連動のさせかた(必要な分だけ)

FB 広告 最適化~グーグルアナリティクスとサーチコンソールの連動のさせかた(必要な分だけ) FB 広告 最適化にあたって必要になってくるツールがグーグルアナリティクスとサーチコンソール。別にグーグルのアナリティクス、サーチコンソールでなくてもアクセス解析はできるんだけど、グーグルはユーザー囲

FB 広告 最適化~グーグルアナリティクスの使い方(必要な分だけ)

FB 広告 最適化~グーグルアナリティクスの使い方(必要な分だけ) FB 広告 最適化にあたって必要になってくるツールがグーグルアナリティクス。別にグーグルのアナリティクスでなくてもアクセス解析はできるんだけど、グーグルはユーザー囲い込みの為他のアクセス解析では見せな

FB 広告 最適化~グーグルサーチコンソールの使い方(必要な分だけ)

FB 広告 最適化~グーグルサーチコンソールの使い方(必要な分だけ) FB 広告 最適化にあたって必要になってくるツールがグーグルサーチコンソール。別にグーグルのサーチコンソールでなくてもいいんだけど、グーグルはユーザー囲い込みの為他のアクセス解析では見せなくしたキーワ

FB 広告 最適化~グーグルのアクセス解析の基本

FB 広告 最適化~グーグルのアクセス解析の基本 FB広告を最適化するためには、アクセス解析が重要なカギを握ります。FB広告から当該ページに飛んでくるときURLにオプションを付けることができます。このURLにつけたオプションを使ってどの広告から、どん

jQuery ボタンを押しても反応しない

jQuery ボタンを押しても反応しない jQuery の click イベントを使ってボタンを押したら alert を表示する簡単な仕様なのになにも反応しない。一瞬はまってしまうことって・・・ありますよね?例えば、こう書きます。popup.

WP パーマリンク リダイレクト インターナルサーバーエラー

WP パーマリンク リダイレクト インターナルサーバーエラー WP パーマリンクのリダイレクトがインターナルサーバーエラーを起こすようになった。ユーザーさんのサイトなので「なにをしたか」わからない。WP パーマリンク リダイレクト インターナルサーバーエラーのい