-1

我有一个爬虫,它抓取网站获取信息,然后将值插入数据库,它似乎可以很好地插入前 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抓取功能

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

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

于 2012-06-12T20:23:57.730 回答
0

不久前有一个类似的问题,原来是由于 PHP 作为 FastCGI 运行并且进程守护进程终止了脚本,尝试计算脚本退出前花费的秒数,如果每次都相同,请尝试切换到 CGI 然后再试一次。

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

于 2012-06-12T20:32:46.587 回答