PHP コレクション クロール

Jun 23, 2016 pm 02:30 PM

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

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPロギング:PHPログ分析のベストプラクティス PHPロギング:PHPログ分析のベストプラクティス Mar 10, 2025 pm 02:32 PM

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

See all articles