検索
ホームページphp教程php手册PHP は最も単純なクローラー プロトタイプを実装します

PHP は最も単純なクローラー プロトタイプを実装します

Jun 14, 2016 am 12:01 AM
phpコードプロトタイプ成し遂げるオープンソース爬虫類単純プログラミングプログラミング言語ソフトウェア開発

最も単純なクローラー モデルは次のようになります。初期 URL が与えられると、クローラーはコンテンツをプルダウンし、ページ内の URL を見つけ、これらの URL を開始点として使用してクロールを開始します。

以下は、PHP で実装された最も単純なクローラー モデルです。

  1. /**
  2. * クローラー プログラム -- プロトタイプ
  3. *
  4. * BookMoth 2009-02-21
  5. */
  6. /**
  7. * 指定された URL から HTML コンテンツを取得します
  8. *
  9. * @param string $url
  10. * @戻り文字列
  11. */
  12. 関数_getUrlContent($url){
  13. $handle = fopen($url, "r");
  14. if($handle){
  15. $content = stream_get_contents($handle,1024*1024);
  16. $content を返す;
  17. }その他{
  18. false を返す;
  19. }
  20. }
  21. /**
  22. * HTML コンテンツからリンクをフィルタリングします
  23. *
  24. * @param string $web_content
  25. * @return array
  26. */
  27. 関数_filterUrl($web_content){
  28. $reg_tag_a = '/'" ]*).*?>/';
  29. $result = preg_match_all($reg_tag_a,$web_content,$match_result);
  30. if($result){
  31. return $match_result[1];
  32. }
  33. }
  34. /**
  35. * 正しい相対パス
  36. *
  37. * @param string $base_url
  38. * @param array $url_list
  39. * @return array
  40. */
  41. function _reviseUrl($base_url,$url_list){
  42. $url_info = parse_url($base_url);
  43. $base_url = $url_info["スキーム"].'://';
  44. if($url_info["user"]&&$url_info["pass"]){
  45. $base_url .= $url_info["user"].":".$url_info["pass"]."@";
  46. }
  47. $base_url .= $url_info["ホスト"];
  48. if($url_info["ポート"]){
  49. $base_url .= ":".$url_info["port"];
  50. }
  51. $base_url .= $url_info["パス"];
  52. print_r($base_url);
  53. if(is_array($url_list)){
  54. foreach ($url_list as $url_item) {
  55. if(preg_match('/^http/',$url_item)){
  56. //已经是完全的url
  57. $result[] = $url_item;
  58. }その他 {
  59. //不完全なurl
  60. $real_url = $base_url.'/'.$url_item;
  61. $result[] = $real_url;
  62. }
  63. }
  64. $result を返す;
  65. }else {
  66. 戻る;
  67. }
  68. }
  69. /**
  70. * 爬虫
  71. *
  72. * @param string $url
  73. * @return array
  74. */
  75. 関数クローラー($url){
  76. $content = _getUrlContent($url);
  77. if($content){
  78. $url_list = _reviseUrl($url,_filterUrl($content));
  79. if($url_list){
  80. $url_list を返す;
  81. }else {
  82. 戻る;
  83. }
  84. }それ以外{
  85. 戻る;
  86. }
  87. }
  88. /**
  89. * テスト用のメインプログラム
  90. *
  91. */
  92. 関数 main(){
  93. $current_url = "http://hao123.com/";//最初のurl
  94. $fp_puts = fopen("url.txt","ab");//记录url列表
  95. $fp_gets = fopen("url.txt","r");//保存url列表
  96. してください{
  97. $result_url_arr = クローラー($current_url);
  98. if($result_url_arr){
  99. foreach ($result_url_arr as $url) {
  100. fputs($fp_puts,$url."rn");
  101. }
  102. }
  103. }while($current_url = fgets($fp_gets,1024));//不断获得url
  104. }
  105. メイン();
  106. ?>

もちろん、この爬虫類はまだ次の進化を遂げる必要があります:

1. より正確な URL リンクを貼り付けます。現在のリンクの形式が正しくない可能性があります。

2. 重複した URL リンクを削除できます。今日のクローラーは多くの反復作業を実行します。

3. 環状道路を怖がるクローラーを避ける。常に右折する車は環状 300 号線のみを走行でき、他の場所には行けません。

4. マルチスレッドまたはマルチプロセス。 PHP にはスレッドの概念がないため、それをシミュレートするにはシェルのようなものが必要になる場合があります。

5. ...漢字 2 の N 乗を省略します。

とにかく、考えてみてください~

http://blog.csdn.net/bookmoth/archive/2009/02/21/3916538.aspx より

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。