php使用curl和正则表达式抓取网页数据示例(2)

echo "<br/>INIT BEGIN START WRITE!";
  $st=new self();
  $cons=$st->getBookContextById($id);
  $title=$st->getBookNameById($id);
  $cons=trim($cons);
  $t=explode(" ",$title);
  //构造目录
  $dir=array();
  $dir=explode("_",$t[0]);
  $wzdir=$dir[0];  //书名称 作为目录名称
  $wzchapter=$dir[1]; //第几章
  //创建目录
  $wzdir2=iconv("UTF-8", "GBK", $wzdir);//目录编码 注意这里保留对$wzdir字符串的引用,用来构造文件名,不能用此处,防止二次编码
  if(!file_exists($wzdir2)){
   mkdir($wzdir2); //创建目录
  }
  //构造文件名
  $wztitle="./".$wzdir."https://www.jb51.net/"."$t[0]".".txt";
  //保证保存的文件名称不是乱码
  $wztitle=iconv("UTF-8", "GBK", $wztitle);
  $f=fopen($wztitle,"w+");
  fwrite($f,$cons);
  echo "<font color='green'>$wzdir </font>".$wzchapter."<font color='red'>写入成功</font>";
  fclose($f); 
  
  } 
  else{
  $ids=self::getBookIdsById($id); 
 
  //这里服务器可能会掉线,所以最好用session记录循环
  #for($i=$_SESSION["$id"."_fid"];$i<=count($ids);$_SESSION["$id"."_fid"]++,$i++){
 
   #self::createBookById($id."_".$ids[$_SESSION["$id"."_fid"]++]);//构造id
  #}
  
  for($i=$_SESSION["$id"."_fid"];$i<=count($ids);$_SESSION["$id"."_fid"]++,$i++){
 
   self::createBookById($id."_".$ids[$i]);//构造id
  }
  
  #echo "<hr/><hr/><br/><h1>写入工作全部完成</h1>";
  #echo $id."_".$ids[0]."<br/>"; 
  #var_dump($ids);
  
  }


 }
  /*
  获取小说的所有ID
  @param $id 文章ID
  @return array;
  */
  public static function getBookIdsById($aid){ 
  $ch= curl_init();
  $url='http://www.motie.com/book/'.$aid."/chapter";
  //注意这里的?可以获取最少匹配项
  $ru='/[\s\S]*?<li class=https://www.jb51.net/article/\"https://www.jb51.net/article/\" createdate=https://www.jb51.net/article/\"\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}\">[\s\S]*?<a href=https://www.jb51.net/article/\"\/book\/'.$aid.'_(\d*?)\"\s{1}>.*?<\/a>.*?/u';//正则表达式匹配
  //设置选项,包括URL
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不自动输出内容
  curl_setopt($ch, CURLOPT_HEADER, 0);//不返回头部信息
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0);
  //执行curl
  $output = curl_exec($ch);
  // 检查是否有错误发生
  if(curl_errno($ch)){
  echo 'Curl error: ' . curl_error($ch);
  }
  //释放curl句柄
  curl_close($ch);
  $arr=array();
  preg_match_all($ru,$output,$arr,PREG_PATTERN_ORDER);
  return $arr[1];
  }
}
?>

getinfo.php

复制代码 代码如下:


<?php
 session_start();
require_once("SpiderTools.class.php");
if($_REQUEST["bid"]){
if(is_numeric($_REQUEST["bid"])){
 SpiderTools::createBookById(trim($_REQUEST["bid"]));
 }
 else{
  echo "<br/>请输入正确的文章ID<br/>";
 }
}
?>

index.html

复制代码 代码如下:


<html>
<head><meta charset="utf-8"/></head>
<title>下载小说啦</title>
<body>
<h1>输入磨铁中文网你想看到的小说ID号就可以下载小说啦</h1>
<form method="get" action="getinfo.php">
<input type="text" value=""/>
<input type="button" value="生成小说"/>
</form>
<div>
</div>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4e7f5f2caff3610f9a2a660ef31e1bb9.html