今日、私は捜狐ホームページのニュースセクションをクロールするよう割り当てられました。元々はとても簡単な事だったのですが、意外にも捜狐のページに行くとキャプチャーしたコードが常に文字化けしていて、どう転送しても動作しませんでした。徹底的に調査する必要があり、多くのことを学んだので、共有するために書き留めました。
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))。 '
上記の方法に加えて、Snoopy を使用することもできます。
Snoopy とは何ですか? (スヌーピーをダウンロード)
Snoopy は、Web ページのコンテンツを取得してフォームを送信するタスクを完了するために使用される php クラスです。
スヌーピーのいくつかの機能: * ウェブページのコンテンツをクロールするのに便利
* ウェブページのテキストコンテンツをクロールするのに便利 (HTML タグを削除)
* ウェブページのリンクをクロールするのに便利
* サポートプロキシホスト
* 基本的なユーザー名/パスワード検証をサポート
* user_agent、リファラー (ソース)、Cookie およびヘッダーコンテンツ (ヘッダーファイル) の設定をサポート
* ブラウザーのリダイレクトをサポートし、リダイレクトの深さを制御できます
* のリンクを変換できますWeb ページ 高品質の URL に展開 (デフォルト)
* データを送信して戻り値を取得するのに便利
* トラッキング HTML フレームワークをサポート (v0.92 で追加)
* リダイレクト時の Cookie の受け渡しをサポート (v0.92 で追加) )
コレクション体験
あなたの個人的なコレクション体験を共有してください:
1. ホットリンクから保護されているサイトを使用しないでください 実際、出所を偽ることはできますが、そのようなコレクションのコストはかかります。サイトの高さが高すぎます
2. 収集 ウェブサイトを最速にするには、ローカルで収集するのが最善です
3. 収集するときは、最初にデータの一部をデータベースに保存し、次のデータを待つことができることがよくあります後の処理ステップ。
4. 収集時にエラーを処理する必要があります。収集が 3 回失敗した場合は、通常はスキップします。以前は、コンテンツを選択するのに迷ってしまうことがよくありました。
5. 倉庫に保管する前に適切な判断を下し、コンテンツの合法性をチェックし、不要な文字列をフィルタリングする必要があります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
