ホームページ > バックエンド開発 > PHPチュートリアル > PHP コレクション クロール

PHP コレクション クロール

WBOY
リリース: 2016-06-23 14:30:41
オリジナル
970 人が閲覧しました

今日、私は捜狐ホームページのニュースセクションをクロールするよう割り当てられました。元々はとても簡単な事だったのですが、意外にも捜狐のページに行くとキャプチャーしたコードが常に文字化けしていて、どう転送しても動作しませんでした。徹底的に調査する必要があり、多くのことを学んだので、共有するために書き留めました。

1.php収集プログラムとは何ですか?

2.なぜ集めるのですか?

3. 何を集めますか?

4. 集め方は?

5. 収集アイデア

6. 収集プログラムのサンプル

PHP 収集プログラムとは何ですか?

php 収集プログラムは、php 泥棒とも呼ばれ、主にインターネット上の Web ページ内の特定のコンテンツを自動的に収集するために使用されます。これは、php 言語で書かれた Web プログラムであり、php をサポートするプラットフォーム上で実行されます。 「自動収集」について話すとき、Baidu Google や検索エンジンの機能を思い浮かべるかもしれません。 php コレクション プログラムも同様の作業を行います。

なぜ集めるのですか?

インターネットは急速に発展しており、Web データは日々幾何学的に増加しています。この膨大なデータに直面して、Web サイト管理者として必要な情報を収集するにはどうすればよいでしょうか?特に 1 つまたは複数の同様の Web サイトの場合、Web サイトのコンテンツを充実させるために多くの情報が必要になります。コピーして貼り付けるだけで済みますか?ウェブマスターとして、オリジナル コンテンツの作成に多くの時間を費やし、インターネットの情報量全体の発展スピードに遅れを取らなければならないのでしょうか?これらの問題に対する解決策はただ 1 つ、収集です。このようなプログラムがあれば、Web サイトで必要な特定のコンテンツを自動または半自動的に収集し、Web サイト上の情報をリアルタイムで更新できるようになります。それはあなたが夢見ていることではないでしょうか?ここで収集プログラムが登場します。

何を集めますか?

どのような種類のウェブサイトを作成するかによって異なります。写真サイトを構築する場合は写真を収集し、音楽サイトを構築する場合は MP3 を収集し、ニュースを収集します。すべては、Web サイトのコンテンツ構造のニーズによって異なります。何を収集するかを決定した後でのみ、対応する収集プログラムを作成できます。

集め方は?

通常は回収手続きが対象となります。つまり、対象となる Web サイトを用意し、必要なコンテンツを含む Web サイトをいくつか収集し、それぞれの HTML コードを分析して規則的なものを見つけ、収集したい特定のコンテンツに基づいて PHP コードを記述する必要があります。必要なものを集めたら、必要な保管方法を選択できます。たとえば、HTML ページを直接生成したり、さらに処理するためにデータベースに保存したり、後で使用するために特定の形式で保存したりできます。

コレクションのアイデア

コレクション プログラムのアイデアは非常にシンプルで、次の手順に大別できます。

1. リモート ファイルのソース コードを取得します (file_get_contents または fopen を使用します) 2. を分析します。必要なコンテンツを取得するためのコード (ここでは、通常はページングを取得するために通常のマッチングが使用されます)。

3. ルートから取得したコンテンツをダウンロードして保存します。

ここでの 2 番目のステップは、数回繰り返す必要がある場合があります。たとえば、最初にページング アドレスを分析し、次に内部ページのコンテンツを分析して、必要なものを取得する必要があります。

/* ***リモート ファイルのソース コードを取得するためによく使用される 3 つの方法** */
/* **方法 1、fopen()、stream_context_create() メソッド*** */

$ opts = array(

'http'=> array(

'method'=>"GET",
'header'=>"受け入れ言語: enrn" .
"Cookie: foo=barrn"
)
);
$context = stream_context_create( $opts);
$fp = fopen('http://www.example.com', 'r', $context); ($fp);

/******方法 2、ソケット*******/
function get_content_by_socket($url, $host){
$fp = fsockopen($host, 80) or die("Open ". $url ." failed");
$header = "GET /".$url ." HTTP/1.1rn";
$header .= "Accept: */*rn";
$header .= "Accept-Language: zh-cnrn";
$header .= " Accept-Encoding: gzip, deflatern";
$header .= "User-Agent: Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)rn";
$header .= 「ホスト: 」。 $host ."rn";
$header .= "接続: キープアライブン";
//$header .= "Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-rnrn";
$header .= "接続: Closernrn";
fwrite($fp, $header);
while (!feof($fp)) {
$contents .= fgets($fp, 8192);
}
fclose($ fp);
return $contents;
}

/******メソッド 3、file_get_contents ()、stream_context_create() メソッド 3*******/
$opts = array(
'http'=>array(
'method'=>"GET",
'header' =>"Content-Type: text/html; charset=utf-8"
)
);        
$context = stream_context_create($opts);        
$file = file_get_contents('http://www.sohu.com/', false, $context);        

/******方法 4、PHP の cURL http://www.chinaz.com/program/2010/0119/104346.shtml*******/
$ch = curl_init();
// 2.URLを含む設定
curl_setopt($ch, CURLOPT_URL, "http://www.sohu.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_HTTPHEADER,array ("Content-Type: text/xml; charset=utf-8","期待値: 100-Continue"));
// 3. 実行并获取HTML文档内容
$output = curl_exec($ch);
var_dump($output);
// 4. 释放curl句柄
curl_close($ch);

/*注意
1.file_get_contents と fopen を使用する場合は、必ず空の許可を有効にしてください。方法: php.ini を設定し、allow_url_fopen = オン、allow_url_fopen を開くと、fopen と file_get_contents の両方を使用してプログラム ファイルを開くことはできません。 方法:windows で php.ini を変更し、extension=php_curl.dll の先頭の分数を削除し、ssleay32.dll と libeay32.dll を C:/WINDOWS/system32 にコピーする必要があります。Linux では
*/
?>

採集范例序列

/* 画像のダウンロード関数*/
function getimg($url, $filename){
/* 画像の URL が空かどうかを判断し、空の場合は関数を停止します*/
if( $url= =""){
return false;
}
/* 画像の拡張子を取得し、変数 $ext*/ に格納します
$ext= strrchr( $url,".")
/* かどうかを判定します。は合法的な画像ファイルです*/
if( $ext!=".gif" && $ext!=".jpg"){
return false
}
/* 画像を読み取ります*/
$img= file_get_contents( $ url);
/* 指定されたファイルを開きます*/
$fp=@ fopen( $filename. $ext,"a")
/* 指定されたファイルに画像を書き込みます*/
fwrite( $fp, $img );
/* ファイルを閉じる* /
fclose( $fp)
/* 画像の新しいファイル名を返す*/
return $filename.

コードを表示

/* *
* 画像コレクション php プログラム
*
* Copyright(c) 2008 by Xiaochao (ccxxcc) All Rights Reserved
*
* 著者に連絡するには、{@link mailto までご連絡ください。 :ucitmc@163.com}
*
* @author ccxxcc
* @version $Id: {filename},v 1.0 {time} $
* @package system
*/

set_time_limit(0)
/* *
* ファイル書き込み
* @param string $file ファイルパス
* @param string $str コンテンツ書き込み
* @param char $mode 書き込みモード
*/
function wfile( $file, $str, $mode= 'w' )
{
$oldmask = @ umask(0);
$fp = @ fopen( $file, $mode);
if(! $fp)
{
false を返します。
}
else
{
@ fwrite( $fp, $str);
@ umask( $oldmask)
関数 savetofile( $ path_get, $ path_save)
{
style = 'color:red'> $ path_getは取得できません。 ;
}
else
return -1;
}

function getExt( $path)
{
$path = pathinfo( $path);
return strtolower( $path['extension']);
}

/* *
* 按指定路径生成目录
*
* @param string $path 路径
*/
function mkDirs( $path)
{
$adir = explode('/', $path);
$dirlist = '';
$rootdir = array_shift( $adir);
if(( $rootdir!='.'|| $rootdir!='..')&&! file_exists( $rootdir))
{
@ mkdir( $rootdir);
}
foreach( $adir as $key=> $val)
    {
         if( $val!='.'&& $val!='..')
        {
             $dirlist .= "/". $val;
             $dirpath =  $rootdir. $dirlist;
             if(! file_exists( $dirpath))
            {
                @ mkdir( $dirpath);
                @ chmod( $dirpath,0777);
            }
        }
    }
}

/* *
* 从文本中取得一维数组
*
* @param    string     $file_path    文本路径
*/
function getFileListData( $file_path)
{
     $arr = @ file( $file_path);
     $data =  array();
     if( is_array( $arr) && ! empty( $arr))
    {
         foreach( $arr  as  $val)
        {
             $item =  trim( $val);
             if(! empty( $item))
            {
                 $data[] =  $item;
            }
        }
    }
     Return  $data;
}

// 采集开始

//传入自己的需要采集的图片url列表文本文件 每个图片url写一行
$url_file =  isset( $_GET['file'])&&! empty( $_GET['file'])? $_GET['file']: null;
$txt_url = "txt/". $url_file;

$urls =  array_unique(getFileListData( $txt_url));
if( empty( $urls))
{
         echo('

无链接地址
');
die();
$save_url = "images/". date("y_m_d", time())."/"; // 日付ごとにフォルダーを作成します
$ i = 1; if($ urls)&& count($ urls))。 '
finish
');





上記の方法に加えて、Snoopy を使用することもできます。




Snoopy とは何ですか? (スヌーピーをダウンロード)

Snoopy は、Web ページのコンテンツを取得してフォームを送信するタスクを完了するために使用される php クラスです。

スヌーピーのいくつかの機能:

* ウェブページのコンテンツをクロールするのに便利

* ウェブページのテキストコンテンツをクロールするのに便利 (HTML タグを削除)

* ウェブページのリンクをクロールするのに便利

* サポートプロキシホスト

* 基本的なユーザー名/パスワード検証をサポート

* user_agent、リファラー (ソース)、Cookie およびヘッダーコンテンツ (ヘッダーファイル) の設定をサポート

* ブラウザーのリダイレクトをサポートし、リダイレクトの深さを制御できます

* のリンクを変換できますWeb ページ 高品質の URL に展開 (デフォルト)

* データを送信して戻り値を取得するのに便利

* トラッキング HTML フレームワークをサポート (v0.92 で追加)

* リダイレクト時の Cookie の受け渡しをサポート (v0.92 で追加) )

コレクション体験

あなたの個人的なコレクション体験を共有してください:

1. ホットリンクから保護されているサイトを使用しないでください 実際、出所を偽ることはできますが、そのようなコレクションのコストはかかります。サイトの高さが高すぎます

2. 収集 ウェブサイトを最速にするには、ローカルで収集するのが最善です

3. 収集するときは、最初にデータの一部をデータベースに保存し、次のデータを待つことができることがよくあります後の処理ステップ。

4. 収集時にエラーを処理する必要があります。収集が 3 回失敗した場合は、通常はスキップします。以前は、コンテンツを選択するのに迷ってしまうことがよくありました。

5. 倉庫に保管する前に適切な判断を下し、コンテンツの合法性をチェックし、不要な文字列をフィルタリングする必要があります。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート