最初の記事でget_html()を使って簡単なデータ収集を実装します。データは1つずつ収集するので、1ページを1秒とすると、送信時間は全ページのダウンロード時間となります。秒。幸いなことに、curl には並列処理機能も備わっています。
並列収集の関数を作成するには、まず、収集するページの種類と、収集されたページに対してどのようなリクエストを使用するかを理解する必要があります。その後、比較的一般的に使用される関数を作成できます。
get_html() を作成するときに、オプション配列を使用してより多くのcurlパラメータを渡すことができることがわかりました。そのため、複数のページに対して同時にコレクション関数を作成する機能は保持する必要があります。
Web ページの HTML をリクエストする場合でも、インターネット API インターフェイスを呼び出す場合でも、get と post によって渡されるパラメータは常に同じページまたはインターフェイスをリクエストしますが、パラメータは異なります。パラメータのタイプは次のようになります:
この場合、問題は解決されたようです。しかし、curlマニュアルを隅々まで調べてみましたが、getパラメーターがどこに渡されるのかわかりませんでした。そのため、配列の形式で$urlを渡し、メソッドパラメーターを追加することしかできません
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
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/326892.html技術記事最初の記事でget_html()を使用して簡単なデータ収集を実装します。データは1つずつ収集されるため、1ページを1秒とすると、送信時間は...。