ホームページ  >  記事  >  バックエンド開発  >  PHP クローラー キャプチャ情報とアンチクローラー関連

PHP クローラー キャプチャ情報とアンチクローラー関連

WBOY
WBOYオリジナル
2016-06-13 12:20:511088ブラウズ

PHP クローラーは情報とアンチクローラー関連をキャプチャします。
58 はユーザーをクロールし、Ganji と 58 は相互にクロールしました。最終的には、すべての情報は同じであり、それらはすべてデータベース呼び出しでした。クローラー、隠されたルールああ、支配的なプレイヤーの一部がさまざまな方法で密かに攻撃しています。ユーモラスな例についてはあまりコメントしたくありません。 Donkey.com Web サイトの。この時代は、お金を使い、お金を集める時代です。あらゆる種類のヤオ・チェン、ヤン・ミー、ゲー・ユー、あらゆる種類の地下鉄やバスの広告、あらゆる種類の衛星テレビの広告が圧倒的です~~~

PHP クローラーがどのように情報をキャプチャするかについて話しましょう~~Curl 関数は PHP クローラーの最初の選択肢です。まずそれを知ってください。
0x01.curl 拡張機能のインストール:
1. php サブフォルダー ext に php_curl.dll があることを確認します (一般的に入手可能) 、環境変数は設定中に設定されます)
2. php.ini の ;extension=php_curl.dll を extension=php_curl.dll としてコメント解除します
3. Apache を再起動すると完了です。
4. それでも動作しない場合は、php5/libeay32.dll と ssleay32.dll をシステム ディレクトリ windows/ にコピーします。これら 2 つの DLL の説明は OpenSSL 共有ライブラリです。

それ以外の場合、
致命的なエラー: XX:XXXXXX.php の 3 行目で未定義の関数curl_init() を呼び出しますか?
これは未定義でライブラリが見つからないというエラーです。誰もがそれを知っています。

0x02. まず、情報を収集してクローリングする前に、curl に慣れましょう。大爆発の情報時代では、情報をクローリングするのは難しくありません。ちなみに、 ログイン、COOKIE をテストしてください。

PHP の CURL 関数ライブラリ (クライアント URL ライブラリ関数) は強力なライブラリです。

curl_close — Curl セッションを閉じる
curl_copy_handle — Curl 接続リソースのすべての内容とパラメーターをコピーします
curl_errno — 現在のセッションのエラー情報を含む数値を返します
curl_error — エラーを返します現在のセッションの文字列を含むエラー メッセージ エラー メッセージ
curl_exec — Curl セッションを実行します
curl_getinfo — Curl 接続リソース ハンドルに関する情報を取得します
curl_init — Curl セッションを初期化します
curl_multi_add_handle — Curl バッチ セッションに追加します個々のカール ハンドル リソース
curl_multi_close — バッチ ハンドル リソースを閉じる
curl_multi_exec — Curl バッチ ハンドルを解析します
curl_multi_getcontent — 取得した出力のテキスト ストリームを返します
curl_multi_info_read — 現在解析されているcurlを取得します 関連送信情報
curl_multi_init — Curl バッチ ハンドル リソースを初期化します
curl_multi_remove_handle — Curl バッチ ハンドル リソース内のハンドル リソースを削除します
curl_multi_select — cURL 拡張機能に関連付けられているすべてのソケットを取得し、「選択」できます
curl_setopt_array — Curl のセッション パラメータを配列形式で設定します
curl_setopt — Curl のセッション パラメータを設定します
curl_version — Curl 関連のバージョン情報を取得します

curl_init() 関数の役割は、curl セッションを初期化することです。curl_init() 関数の唯一のパラメータはオプションであり、URL アドレスを表します。
curl_exec() 関数は、curl セッションを実行するために使用されます。唯一のパラメーターは、curl_init() 関数によって返されるハンドルです。
curl_close() 関数は、curl セッションを閉じるために使用されます。唯一のパラメータは、curl_init() 関数によって返されるハンドルです。

簡単な例:
$url = "http://yxmhero1989.blog.163.com/";//これはお勧めしません。大規模な Web サイトをクロールします。通常、クローラー対策メカニズムが備わっています。IP がブロックされても私を責めないでください~~
$ch =curl_init($url);//初期curlセッション
$fp = fopen(" homepage.txt", "w" ); //キャプチャしたWebページの内容をtxtファイルに書き込みます。データベースの操作方法を説明します。
curl_setopt($ch, CURLOPT_FILE, $fp);//curl のセッションパラメータを設定します
curl_setopt($ch, CURLOPT_HEADER, 0);//ヘッダーを設定します
curl_exec($ch);// Curl セッションを実行
curl_close($ch);//curl セッションを閉じる
fclose($fp);
?>

0x03. CURL_SETOPT() 関数の設定について

boolcurl_setopt (int ch,文字列オプション、混合値)

curl_setopt() 関数は、CURL セッションのオプションを設定します。 option パラメータは必要な設定であり、value はこのオプションで指定される値です。

次のオプションの値は、長整数 (オプション パラメーターで指定) として使用されます:

* CURLOPT_INFILESIZE:ファイルをアップロードする リモート サイトに、このオプションはアップロードするファイルのサイズを PHP に伝えます。
* CURLOPT_VERBOSE: CURL にすべての予期しないイベントを報告させたい場合は、このオプションをゼロ以外の値に設定します。
* CURLOPT_HEADER: 出力にヘッダーを含める場合は、このオプションをゼロ以外の値に設定します。
* CURLOPT_NOPROGRESS: PHP に CURL 転送の進行状況バーを表示させたくない場合は、このオプションをゼロ以外の値に設定します。注: PHP はこのオプションをゼロ以外の値に自動的に設定します。このオプションはデバッグ目的でのみ変更してください。
* CURLOPT_NOBODY: 出力に本文部分を含めたくない場合は、このオプションをゼロ以外の値に設定します。
* CURLOPT_FAILONERROR: エラーが発生した場合 (HTTP コードが 300 以上を返す場合)、PHP が表示されないようにするには、このオプションをゼロ以外の値に設定します。デフォルトの動作では、通常のページが返され、コードは無視されます。
* CURLOPT_UPLOAD: PHP にアップロードの準備をさせたい場合は、このオプションをゼロ以外の値に設定します。
* CURLOPT_POST: PHP で通常の HTTP POST を実行する場合は、このオプションをゼロ以外の値に設定します。この POST は通常の application/x-www-from-urlencoded タイプで、主に HTML フォームで使用されます。
* CURLOPT_FTPLISTONLY: このオプションをゼロ以外の値に設定すると、PHP は FTP のディレクトリ名をリストします。
* CURLOPT_FTPAPPEND: このオプションをゼロ以外の値に設定すると、PHP はリモート ファイルを上書きせずに適用します。
* CURLOPT_NETRC: このオプションをゼロ以外の値に設定すると、PHP は ~./netrc ファイル内で接続先のリモート サイトのユーザー名とパスワードを検索します。
* CURLOPT_FOLLOWLOCATION: このオプションをゼロ以外のヘッダー ("Location: " など) に設定すると、サーバーはそれを HTTP ヘッダーの一部として送信します (これは再帰的であることに注意してください。PHP は "Location: " のようなものを送信します)頭)。
* CURLOPT_PUT: HTTP を使用してファイルをアップロードするには、このオプションをゼロ以外の値に設定します。このファイルをアップロードするには、CURLOPT_INFILE および CURLOPT_INFILESIZE オプションを設定する必要があります。
* CURLOPT_MUTE: このオプションをゼロ以外の値に設定すると、PHP は CURL 関数に対して完全にサイレントになります。
* CURLOPT_TIMEOUT: 最大秒数として長整数を設定します。
* CURLOPT_LOW_SPEED_LIMIT: 送信されるバイト数を制御する長整数を設定します。
* CURLOPT_LOW_SPEED_TIME: CURLOPT_LOW_SPEED_LIMIT で指定されたバイト数を送信する秒数を制御する長整数を設定します。
* CURLOPT_RESUME_FROM: バイト オフセット アドレス (転送先の開始フォーム) を含む長いパラメータを渡します。
* CURLOPT_SSLVERSION: SSL バージョンを含む長いパラメーターを渡します。デフォルトでは、PHP は独自のハードワークを実行しますが、セキュリティを強化するには手動で設定する必要があります。
* CURLOPT_TIMECONDITION: 長いパラメーターを渡して、CURLOPT_TIMEVALUE パラメーターの処理方法を指定します。このパラメータは TIMECOND_IFMODSINCE または TIMECOND_ISUNMODSINCE に設定できます。これはHTTPのみの場合です。
* CURLOPT_TIMEVALUE: 1970 年 1 月 1 日から現在までの秒数を渡します。この時間は、CURLOPT_TIMEVALUE オプション、またはデフォルトの TIMECOND_IFMODSINCE によって指定された値として使用されます。

次のオプションの値は文字列として扱われます:

* CURLOPT_URL: これは、PHP を使用して取得する URL アドレスです。このオプションは、curl_init() 関数を使用した初期化中に設定することもできます。
* CURLOPT_USERPWD: [ユーザー名]:[パスワード] の形式で文字列を渡し、PHP を使用して接続します。
* CURLOPT_PROXYUSERPWD: [ユーザー名]:[パスワード] の形式で文字列を渡し、HTTP プロキシに接続します。
* CURLOPT_RANGE: 指定したい範囲を渡します。 X または Y を除いた「X-Y」形式である必要があります。 HTTP 転送では、カンマ (X-Y、N-M) で区切られた複数の間隔もサポートされます。
* CURLOPT_POSTFIELDS: すべてのデータを含む文字列を HTTP "POST" 操作として渡します。
* CURLOPT_REFERER: HTTP リクエスト内の「リファラー」ヘッダーを含む文字列。
* CURLOPT_USERAGENT: HTTP リクエスト内の「user-agent」ヘッダーを含む文字列。
* CURLOPT_FTPPORT: ftp の「POST」コマンドで使用される IP アドレスを含む IP アドレスを渡します。この POST 命令は、指定した IP アドレスに接続するようにリモート サーバーに指示します。この文字列には、IP アドレス、ホスト名、ネットワーク インターフェイス名 (UNIX の場合)、または「-」 (システムのデフォルトの IP アドレスを使用) を指定できます。
* CURLOPT_COOKIE: HTTP Cookie を含むヘッダー接続を渡します。
* CURLOPT_SSLCERT: 証明書を含む文字列を PEM 形式で渡します。
* CURLOPT_SSLCERTPASSWD: CURLOPT_SSLCERT 証明書を使用するために必要なパスワードを含むパスワードを渡します。
* CURLOPT_COOKIEFILE: Cookie データを含むファイルの名前を含む文字列を渡します。この Cookie ファイルは、Netscape 形式であることも、ファイルに保存されている HTTP スタイルのヘッダーのスタックであることもできます。
* CURLOPT_CUSTOMREQUEST: HTTP リクエストを行う際に、GET または HEAD で使用する文字を渡します。 HTTP リクエストを実行するときに GET または HEAD の代わりに使用される文字列を渡します。これは、HTTP リクエストを実行する場合や、よりわかりにくい別の HTTP リクエストを実行する場合に便利です。次のオプションには、ファイルの説明 (fopen() 関数を使用して取得) が必要です。
* CURLOPT_FILE: このファイルは、配置および送信する出力ファイルになります。
* CURLOPT_INFILE: このファイルは、配置して送信する出力ファイルになります。
* CURLOPT_WRITEHEADER: このファイルには出力のヘッダー部分が含まれます。
* CURLOPT_STDERR: このファイルには、stderr の代わりにエラーが書き込まれています。ログインが必要なページを取得する例。現在の方法は、必要な人が毎回ログインする方法です。

PHP は最も単純なクローラー プロトタイプを実装します (原作者の通常のコメントが逆になり、エラーが発生します (笑))


コードは次のとおりです

function _getUrlContent($url){
$handle = fopen($url, "r");
if($handle){
$content = stream_get_contents($handle,1024*1024);
return $content;
}else{
return false;
}
}

関数_filterUrl($web_content){
$reg_tag_a = "/<[a|A].*?href=['"]{0,1}([^>' " ]*).*?>/";
//$result = preg_match_all($reg_tag_a,$web_content,$match_result);
$result = preg_match_all("/]*?name=['"]?description['"]?[^>]*?>/is",$web_content,$ match_result);
if($result){
return $match_result[1];
}
}


function _reviseUrl($base_url,$url_list){
$url_info = parse_url($base_url);
$base_url = $url_info["scheme"].'://';
if($ url_info["user"]&&$url_info["pass"]){
$base_url .= $url_info["user"]。" :".$url_info["pass"]."@";
}
$base_url .= $url_info["host" ];
if($url_info["port"]){
$base_url .= ":".$url_info["port"];
}
$base_url .= $url_info["path"];
print_r($base_url);
if(is_array($url_list)){
foreach ($url_list as $url_item) {
if( preg_match('/^http/',$url_item)){
//已经是完全的url
$ result[] = $url_item;
}else {
//不完全なurl
$real_url = $base_url.'/'.$url_item;
$result[] = $real_url;
}
}
return $result;
}else {
return;
}
}

関数クローラ($url){
$content = _getUrlContent($url) ;
if($content){
$url_list = _reviseUrl($url,_filterUrl( $content));
if($url_list){
return $url_list;
}else {
return ;
}
}else{
return ;
}
}

function main(){
$current_url = "http://hao123.com/";//最初のurl
$fp_puts = fopen("url.txt","ab");//记录url列表
$fp_gets = fopen("url.txt","r");//保存url列表
do{
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。