Tianya データの定期的なキャプチャ、再帰の失敗、解決策。 。 。 。
前書き: 私のオブジェクト指向の基礎は平均的です。 。
モジュールを捕まえました(ナンセンス)。
次のページはタイムスタンプで完了します。
最初のページのすべてのタイトル URL を取得した後、次のページのアドレスを取得したいだけです (「取得可能」)
さて、最初のページのすべてのタイトル URL を取得した後、次のページの URLページもキャプチャされます
100回再帰して100ページのすべてのタイトルのURLをキャプチャしたいです。
コードを見てみましょう。
public function getAllPage($url){ /** * curl_setopt($ch, CURLOPT_FAILONERROR, true);//记录错误信息设置 * curl_errno可以获得错误码,当然也包括错误的http状态码 curl_error可以获得错误信息 */ $ch = curl_init($url);//初始化一个句柄 curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_TIMEOUT,1111111); $html = curl_exec($ch); curl_close($ch); //修饰一下,从何时开始。 $length = strpos($html, 'class="mt5'); $newHtml = substr($html, $length); //修饰END $pattern = "#\/post-.*\.shtml#i"; //正则表达式 preg_match_all($pattern, $newHtml,$matches); //抓取下一页链接地址 $nextPagePattern = "#\<a href=\"(.*)\"\srel#"; preg_match($nextPagePattern, $newHtml,$nextPage); $nextPageUrl = "http://bbs.tianya.cn".$nextPage['1']; //下一页 END //链接。全。 foreach($matches['0'] as $k=>$v){ $matches[$k] = 'http://bbs.tianya.cn'.$v; } //之前的递归是在这里的,一运行直接死掉了。。。。。 return array( '0'=>$matches, '1'=>$nextPageUrl, ); }
お聞きしたいのですが、このアイデアに問題はありますか?
再帰コード ==! を提供すると便利ですか? !
ディスカッションへの返信 (解決策)
foreach($matches['0'] as $k=>$v){
$matches[$k] $v;
}
変更の意味は何ですかループ内の配列?
コードの再帰部分も投稿されます
foreach($matches['0'] as $k=>$v){
$matches[$k] = 'http://bbs.tianya.cn' .$v;
}
ループ内で配列を変更する意味は何ですか?
コードの再帰部分も投稿されます
1: 完了、キャプチャされたアドレスにはドメイン名がありません。
2: 再帰。 。 。私のコメントは以前このように書かれていました、
for($i=0;$i<100;$i++){ $this->getAllPage($nextPageUrl) }
for($i=0;$i $this->getAllPage($nextPageUrl)
}
これは再帰キャプチャではありません Take 100回。
代わりに、100 回ループし、毎回再帰関数を実行します。そして、再帰関数には出口がなく (再帰からの出口がなく、無限再帰につながります)、当然、関数は終了します。
for($i=0;$i $this->getAllPage($nextPageUrl)
}
これは 100 回再帰的にクロールするわけではありません。
代わりに、100 回ループし、毎回再帰関数を実行します。そして、再帰関数には出口がなく (再帰からの出口がなく、無限再帰につながります)、当然、関数は終了します。
アドバイスをお願いします。
for($i=0;$i $this->getAllPage($nextPageUrl)
}
これは 100 回の再帰的クロールではありません。
代わりに、これは 100 回ループし、毎回再帰関数を実行します。そして、再帰関数には出口がありません (再帰からの出口がなく、無限再帰につながります)、当然、関数は終了します。
輸出は判断ですか?
必要に応じて、これを行うことができます:
public function getAllPage($url, $ Depth, &$result)
$ Depth は再帰の深さを制御します。初期値は 0 です。参照 $result は、最終的な一致結果を記録します。 ジャンプ的な
:
IF ($ Depth == 100) {
Return;
:
$ nextPageurl = "http://bbs.tianya.cn ".1'];
$result[] = 'http://bbs.tianya.cn'.$v;
}
getAllPage( $nextPageUrl,$ Depth+1,$result);
再帰関数の最初の呼び出し:
$result = array();
public function getAllPage($url, $ Depth, &$result)
$ Depth は再帰の深さを制御します。初期値は 0 です。参照 $result は、最終的な一致結果を記録します。 ジャンプ的な
:
IF ($ Depth == 100) {
Return;
:
$ nextPageurl = "http://bbs.tianya.cn ".1']; foreach($matches['0'] as $k=>$v){ 🎜 $result[] = 'http://bbs.tianya.cn'.$v; 🎜 } 🎜 getAllPage( $nextPageUrl,$ Depth+1,$result); 🎜 🎜 🎜 再帰関数の最初の呼び出し: 🎜 $result = array(); 🎜 getAllPage($url,0,$result); ありがとうございます。 ! 🎜

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
