-1

情報を得るために Web サイトをスクレイピングし、値をデータベースに挿入するクローラーがあります。最初の 4000 行を正常に挿入しているように見えますが、クローラーがまだ Web サイトをスクレイピングしているにもかかわらず、mysql データベースへの値の挿入が突然停止します。

データベース テーブル

CREATE TABLE IF NOT EXISTS `catalog` (
  `id` varchar(100) NOT NULL DEFAULT '',
  `title` varchar(100) DEFAULT NULL,
  `value` double DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

PHP挿入機能

function addToCatalog($id, $title, $value){
   $q = "INSERT INTO catalog VALUES('$id', '$title', $value)";
   return mysql_query($q, $this->connection);           
}

phpスクレイプ機能

function scrape($pageNumber){
   $page = file_get_html('http://example.com/p='.$pageNumber);  

   if($page){
      $id = array();
      $title = array();
      $value = array();

      //id
      if($page->find('.productid')){
         foreach ($page->find('.productid') as $p) {
            $id[] = $p->innertext;
         }          
      }

      //title
      if($page->find('.title')){
         foreach($page->find('.title') as $p){
            $title[] = $p->innertext;
         }
      }

      //value
      if($page->find('.value')){
         foreach($page->find('.value') as $p){
            $value[] = $p->innertext;
         }
      }

      for($i=0; $i<sizeof($id); $i++){
          $add = $database->addToCatalog($id[$i], $title[$i], $value[$i]);
          echo $id[$i]." ".$title[$i]." ".$value[$i]."<br>";
      }
   }
}

for($i=0; $i<31300; $i++){
    scrape($i);
}

この問題の助けをいただければ幸いです。

4

2 に答える 2

0

少し前に同様の問題がありました.FastCGIとして実行されているPHPとスクリプトを終了するプロセスデーモンが原因であることが判明しました.スクリプトが終了するまでにかかる秒数を数えてみてください.毎回同じ量の場合,切り替えてみてください. CGI にしてから再試行してください。

また、共有リソースを保護するためにスクリプトを終了する Web ホストである可能性もあるため、共有ホスティング サーバーを使用している場合は、アップグレードする価値があります。

于 2012-06-12T20:32:46.587 に答える
0

プロセスの実行が約 30 秒後に停止する場合は、おそらくmax_execution_time設定に問題があります。

于 2012-06-12T20:23:57.730 に答える