ホームページ >バックエンド開発 >PHPチュートリアル >CURL と正規表現を使用して Web データをクロールする

CURL と正規表現を使用して Web データをクロールする

WBOY
WBOYオリジナル
2016-07-25 08:48:281517ブラウズ
Motie 中国語 Web サイトの非 VIP 章用に、curl と正規表現を使用して作成された小説グラバーです。小説をダウンロードするための小説 ID の入力をサポートします。
依存関係:カール
Curl、正規表現、Ajax などのテクノロジーが使用されており、初心者に適しています。ローカルでテストする場合は、インターネットに接続していることを確認し、PHP がcurl モードをオンにしていることを確認する必要があります。
  1. session_start();
  2. //自動的にクロールされた記事を開始するクラスにカプセル化します
  3. #header("Refresh:30;http://www.test.com:8080");
  4. クラス SpiderTools{
  5. //////////////////////////////////////////// /// ////////////////////////////////////////////// ////// //////////
  6. /*記事IDを入力して記事タイトルを解析*/
  7. ////////////////// /////////// ////////////////////////////////////// ////////////// //////////////////////////////
  8. public function getBookNameById($ aid){
  9. //curl を初期化します
  10. $ch=curl_init() ;
  11. //url
  12. $url='http://www.motie.com/book/'.$aid;
  13. if(is_numeric($aid) ){
  14. //正規表現マッチング
  15. $ru="/ s*(.*)s* s*/";
  16. }
  17. else {
  18. //ゾンビ発生時の家族の生存_ゾンビ発生の第一章が友人のアイ・リーアのために更新されました~_砥ぎ鉄
  19. $ru="/(.*) /";
  20. }
  21. //URL を含むオプションを設定します
  22. curl_setopt($ch, CURLOPT_URL, $url);
  23. curl_setopt($ch, CURLOPT_RETURNTRANSFER) , 1);//コンテンツを自動的に出力しない
  24. curl_setopt( $ch, CURLOPT_HEADER, 0) //ヘッダー情報を返さない
  25. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0); //curlを実行する
  26. $output =curl_exec; ($ch);
  27. //エラーメッセージ
  28. if(curl_exec ($ch) === false){
  29. die(curl_error($ch));
  30. }
  31. // エラーが発生したかどうかを確認します
  32. if(curl_errno($ ch)){
  33. echo 'Curl エラー: ' .curl_error( $ch);
  34. }
  35. //curl ハンドルを解放します
  36. curl_close($ch);
  37. $arr=array();
  38. preg_match_all($ru,$output, $arr);
  39. return $arr[1][0] ;
  40. }
  41. /////////////////////////////// //////////////// ///////////////////////////////// ////////////////// //////////
  42. /*記事内容を解析するには記事 ID を入力*/
  43. //////// ///////////////////////////////////////////////// ///////////////////////////////////////////////// ////
  44. public function getBookContextById($aid){
  45. //記事の解析を開始します
  46. $ids=array( );
  47. $ids=explode("_",$aid);
  48. $titleId=trim($ids [0]);
  49. $aticleId=trim($ids[1]);
  50. $ch=curl_init();
  51. $ru="/
    [sS]*< pre ondragstart="return false" oncopy="return false;" oncut="return false;" oncontextmenu="return false " class="note" id="html_content_d*">[sS]*(.*)< img src="/ajax/chapter/$titleId/$aticleId" class="hidden" />/ui";
  52. $url='http://www.motie.com/book/' .$aid;
  53. //正規表現のマッチング
  54. //URLを含むオプションを設定します
  55. curl_setopt($ch, CURLOPT_URL, $url);
  56. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//コンテンツを自動的に出力しません
  57. curl_setopt($ch, CURLOPT_HEADER, 0);//ヘッダー情報を返さない
  58. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0 );
  59. //curl を実行
  60. $output =curl_exec($ch);
  61. //エラーメッセージ
  62. if (curl_exec($ch) === false){
  63. die(curl_error($ch));
  64. }
  65. / / エラーが発生したかどうかを確認します
  66. if(curl_errno($ch)){
  67. echo 'Curl エラー: ' 。 curl_error($ch);
  68. }
  69. $arr=array();
  70. $arr2=array();
  71. preg_match_all ($ru,$output,$arr);
  72. curl_close($ch);
  73. #var_dump($arr );
  74. $s=$arr[0][0];
  75. $s=substr($s,180) ;
  76. $arr2=explode("CURL と正規表現を使用して Web データをクロールする return trim($arr2[ 0]);
  77. }
  78. ///////////////// //////////////////////// ///////////////////////////////////////////////// /////////////////////
  79. /*静的メソッド@生成された小説ファイルを直接呼び出すことが可能 */
  80. ///////////// //////////////////////////////////// ///////////// ///////////////////////////////////////////////
  81. public static function createBookById($id){
  82. if(!is_numeric($id)){
  83. echo "
    INIT BEGIN START WRITE!";
  84. $ st=new self();
  85. $cons =$st->getBookContextById($id);
  86. $title=$st->getBookNameById($id);
  87. $cons=trim($cons);
  88. $t =explode(" ",$title);
  89. //ディレクトリを構築します
  90. $dir=array();
  91. $dir=explode("_",$t[0]);
  92. $wzdir=$dir[0] //ブック名をディレクトリ名として使用します
  93. $wzchapter =$dir[1]; //章
  94. //ディレクトリを作成します
  95. $wzdir2=iconv("UTF-8", "GBK", $wzdir); //ディレクトリをエンコードするときは、$wzdir への参照に注意してください。ここでは文字列が予約されており、ファイル名を作成するために使用されます。二次エンコードを防ぐためにここでは使用できません
  96. if(!file_exists($wzdir2)){
  97. mkdir($wzdir2) // ディレクトリを作成します
  98. }
  99. //ファイル名を作成します
  100. $wztitle="./".$wzdir."/"."$t[0]".".txt";
  101. //保存されたファイル名が文字化けしていないことを確認します
  102. $ wztitle=iconv ("UTF-8", "GBK", $wztitle);
  103. $f=fopen($wztitle,"w+");
  104. fwrite($f,$cons);
  105. echo "$wzdir ".$wzchapter."書き込み成功";
  106. fclose($f);
  107. }
  108. else{
  109. $ ids=self::getBookIdsById($id);
  110. //ここではサーバーがオフラインになっている可能性があるため、セッション記録ループを使用するのが最善です
  111. #for($i=$_SESSION["$id"."_fid" ];$ i<=count($ids);$_SESSION["$id"."_fid"]++,$i++){
  112. #self::createBookById($id."_".$ids[$ _SESSION[" $id"."_fid"]++]);//id を構築します
  113. #}
  114. for($i=$_SESSION["$id"."_fid"];$i<=count($ ids); $_SESSION["$id"."_fid"]++,$i++){
  115. self::createBookById($id."_".$ids[$i]);// id を構築する }
  116. # echo "


    書き込み作業は完了しました

    ";
  117. #echo $id."_".$ids [0 ]."
    ";
  118. #var_dump($ids);
  119. }
  120. }
  121. /*
  122. 小説のIDをすべて取得
  123. @param $id 記事ID
  124. @return array;
  125. */
  126. public static function getBookIdsById($aid){
  127. $ch=curl_init();
  128. $url='http://www.motie.com/book/'.$aid."/chapter";
  129. / /ここに注意 ?最低限一致するアイテムが取得可能
  130. $ru='/[sS]*?
  131. [sS]*?.*? //URL を含むオプションを設定します
  132. curl_setopt($ch, CURLOPT_URL, $url);
  133. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//自動的に出力しませんcontent
  134. curl_setopt($ch, CURLOPT_HEADER, 0); //ヘッダー情報を返しません
  135. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0); //curlを実行します
  136. $output =curl_exec($ch);
  137. //エラーが発生しました
  138. if(curl_errno($ch)){
  139. echo 'Curl error: ' .curl_error($ch);
  140. }
  141. //curl ハンドルを解放します
  142. curl_close($ch);
  143. $arr=array( );
  144. preg_match_all ($ru,$output,$arr,PREG_PATTERN_ORDER);
  145. return $arr[1];
  146. }
  147. }
  148. ?>
  149. コードをコピー
session_start();
    require_once("SpiderTools.class.php");
  1. if($_REQUEST["bid"]){
  2. if(is_numeric($_REQUEST["bid"]) ){
  3. SpiderTools::createBookById(trim($_REQUEST["bid"]));
  4. }
  5. else{
  6. echo "
    正しい記事 ID を入力してください
    ";
  7. }
  8. }
  9. ?>
  10. コードをコピー
  1. 小説をダウンロード
  2. < ;h1>Motie中国語サイトで見たい小説のID番号を入力して小説をダウンロードしてください
  3. <入力タイプ="text" id="myid" name="myid" value=""/>
  4. < /form>
  • <-- ---AJAX------>
  • コードをコピー


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