ホームページ  >  記事  >  バックエンド開発  >  CURL データ収集に基づく単一ページ並列収集関数 get_htmls の使用_PHP チュートリアル

CURL データ収集に基づく単一ページ並列収集関数 get_htmls の使用_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:11:32983ブラウズ

最初の記事でget_html()を使って簡単なデータ収集を実装します。データは1つずつ収集するので、1ページを1秒とすると、送信時間は全ページのダウンロード時間となります。秒。幸いなことに、curl には並列処理機能も備わっています。

並列収集の関数を作成するには、まず、収集するページの種類と、収集されたページに対してどのようなリクエストを使用するかを理解する必要があります。その後、比較的一般的に使用される関数を作成できます。


機能要件分析:

何を返す?

もちろん、各ページのhtmlは配列にまとめられています

どのようなパラメータが渡されますか?

get_html() を作成するときに、オプション配列を使用してより多くのcurlパラメータを渡すことができることがわかりました。そのため、複数のページに対して同時にコレクション関数を作成する機能は保持する必要があります。

パラメータの種類は何ですか?

Web ページの HTML をリクエストする場合でも、インターネット API インターフェイスを呼び出す場合でも、get と post によって渡されるパラメータは常に同じページまたはインターフェイスをリクエストしますが、パラメータは異なります。パラメータのタイプは次のようになります:

get_htmls($url,$options);

$url は文字列です

$options は 2 次元配列であり、各ページのパラメータは配列です。

この場合、問題は解決されたようです。しかし、curlマニュアルを隅々まで調べてみましたが、getパラメーターがどこに渡されるのかわかりませんでした。そのため、配列の形式で$urlを渡し、メソッドパラメーターを追加することしかできません


関数のプロトタイプが決定されます: get_htmls($urls,$options = array, $method = 'get'); コードは次のとおりです:

コードをコピーします コードは次のとおりです:

function get_htmls($urls, $options = array(), $method = 'get'){
$mh =curl_multi_init();
if($method == 'get'){//get メソッドは値を渡すために最もよく使用されます
Key = & gt; $ url) {
$ options [Curlopt_returntransfer] = true; $ CURLS [ $key; ] = $ch;
curl_multi_add_handle($mh, $curls[$key]){
$option[CURLOPT_POST] = true;
curl_setopt_array($ch, $option);
$curls[$ key] = $ch; }
do {
$mrc =curl_multi_exec($mh,$active);
curl_multi_select($mh);//CPU 負荷を下げるには、CPU 負荷をコメントアウトします
$mrc = ;$ch){
$html =curl_multi_getcontent($ch); curl_multi_remove_handle($mh,$ch); ‐ curl_multi_close($mh );
return $htmls;
}


一般的に使用される get リクエストは、URL パラメーターを変更することによって実装されます。これは、この関数がデータ収集を目的としているためです。カテゴリ別に収集する必要があるため、URL は次のようになります:

http://www.baidu.com/s?wd=shili&pn=0&ie=utf-8

http://www.baidu.com/s?wd=shili&pn=10&ie=utf-8

http://www.baidu.com/s?wd=shili&pn=20&ie=utf-8

http://www.baidu.com/s?wd=shili&pn=30&ie=utf-8

http://www.baidu.com/s?wd=shili&pn=50&ie=utf-8

上記の 5 つのページは非常に規則的で、pn の値のみが変化します。

コードをコピーします コードは次のとおりです:

$urls = array();
for($i=1; $i<=5; $i++){
$urls[] = 'http://www.baidu.com/s?wd=shili&pn='.(($i-1)*10).'&ie=utf-8';
}
$option[CURLOPT_USERAGENT] = 'Mozilla/ 5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0';
$htmls = get_htmls($urls,$option);
foreach($htmls as $html){
echo $html;//HTML を取得ここで続行できます データ処理されました
}

一般的な投稿リクエストのシミュレーション:

次のように post.php ファイルを作成します:

コードをコピーします コードは次のとおりです:

if(isset($_POST['username']) && isset($_POST['password'] )){
echo 'ユーザー名は: '.$_POST['username']。' パスワードは: '.$_POST['password'];
}else{
echo 'リクエストエラー!';

次に、次のように呼び出します:


コードをコピーします コードは次のとおりです:
$url = 'http://localhost/yourpath/post.php';//ここがあなたのパスです
$ options = array();
for($ i=1; $i $option[CURLOPT_POSTFIELDS] = 'username=user'.$i.'&password=pass'.$i;
$options[] = $option;
}
$htmls = get_htmls($url,$options,'post');
foreach($htmls as $html){
echo $html;//ここで HTML を取得すると、データ処理を実行します
}


このように get_htmls 関数は基本的にいくつかのデータ収集関数を実装できます

今日の共有はここまでです。うまく書かれていなかったり、わかりにくかったりする場合は、アドバイスをお願いします

http://www.bkjia.com/PHPjc/326892.html

tru​​ehttp://www.bkjia.com/PHPjc/326892.html技術記事最初の記事でget_html()を使用して簡単なデータ収集を実装します。データは1つずつ収集されるため、1ページを1秒とすると、送信時間は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。