在一定数量的行之后,爬虫不会插入数据库

时间:2012-06-12 20:19:59

标签: php mysql

我有一个抓取网站获取信息的爬虫,然后将值插入数据库,它似乎插入前4000行很好,然后突然停止向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 scrape功能

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);
}

对此问题的任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果大约30秒后该过程的执行停止,则您的问题可能是max_execution_time设置。

答案 1 :(得分:0)

不久前有一个类似的问题,结果是因为PHP运行为FastCGI并且进程守护进程终止了脚本,尝试计算脚本退出之前所需的秒数,如果它每次都相同的数量,尝试切换到CGI然后再试一次。

也可能是您的Web主机终止脚本以保护共享资源,因此如果您使用的是共享托管服务器,则可能值得升级。