找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1239|回复: 0
打印 上一主题 下一主题

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

[复制链接]

2588

主题

2588

帖子

7694

积分

论坛元老

Rank: 8Rank: 8

积分
7694
跳转到指定楼层
楼主
发表于 2018-2-14 05:59:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            利用curl和正则表达式做的一个针对磨铁中文网非vip章节的小说抓取器,支持输入小说ID下载小说。
依赖项:curl
可以简单的看下,里面用到了curl ,正则表达式,ajax等技术,适合新手看看。在本地测试,必须保证联网并且确保php开启curl的mode
SpiderTools.class.php
[U]复制代码[/U] 代码如下:
\s*[url=](.*)\s*\s*/";
  }
  else{
  //丧尸爆发之全家求生路_第一章  丧尸爆发  为吾友爱乐儿更新~_磨铁
  $ru="/(.*)/";
  }
  //设置选项,包括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_exec($ch) === false){
   die(curl_error($ch));
  }
  // 检查是否有错误发生
  if(curl_errno($ch)){
  echo 'Curl error: ' . curl_error($ch);
  }
  //释放curl句柄
  curl_close($ch);
  $arr=array();
  preg_match_all($ru,$output,$arr);
  return $arr[1][0];
   }
//////////////////////////////////////////////////////////////////////////////////////////////////////////     
/*传入文章ID  解析文章内容*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////
public  function getBookContextById($aid){
  //开始解析文章
  $ids=array();
  $ids=explode("_",$aid);
  $titleId=trim($ids[0]);
  $aticleId=trim($ids[1]);
  $ch= curl_init();
  $ru="/[\s\S]*[\s\S]*(.*)
[img][/img]
/ui";
  $url='http://www.motie.com/book/'.$aid;
  //正则表达式匹配
  //设置选项,包括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_exec($ch) === false){
   die(curl_error($ch));
  }
  // 检查是否有错误发生
  if(curl_errno($ch)){
   echo 'Curl error: ' . curl_error($ch);
  }
  $arr=array();
  $arr2=array();
  preg_match_all($ru,$output,$arr);
  curl_close($ch);
  #var_dump($arr);
  $s=$arr[0][0];
  $s=substr($s,180);
  $arr2=explode("
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/*静态方法 @生成小说文件 可以直接调用 */
//////////////////////////////////////////////////////////////////////////////////////////////////////////
     public static function createBookById($id){
  
  if(!is_numeric($id)){
  echo "
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."/"."$t[0]".".txt";
  //保证保存的文件名称不是乱码
  $wztitle=iconv("UTF-8", "GBK", $wztitle);
  $f=fopen($wztitle,"w+");
  fwrite($f,$cons);
  echo "
$wzdir
".$wzchapter."
写入成功
";
  fclose($f);
  
  }
  else{
  $ids=self::getBookIdsById($id);

  //这里服务器可能会掉线,所以最好用session记录循环
  #for($i=$_SESSION["$id"."_fid"];$i
写入工作全部完成";
  #echo $id."_".$ids[0]."
";
  #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]*?[\s\S]*?.*?.*?/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
[U]复制代码[/U][/url] 代码如下:
index.html
[U]复制代码[/U] 代码如下:
下载小说啦

输入磨铁中文网你想看到的小说ID号就可以下载小说啦



PS:关于正则,这里再为大家推荐2款本站的正则表达式在线工具供大家参考使用(包括正则生成、匹配、验证等功能):
JavaScript正则表达式在线测试工具:http://tools.jb51.net/regex/javascript
正则表达式在线生成工具:http://tools.jb51.net/regex/create_reg
            
            
您可能感兴趣的文章:
  • php IIS日志分析搜索引擎爬虫记录程序
  • php 向访客和爬虫显示不同的内容
  • PHP多线程抓取网页实现代码
  • PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
  • PHP curl实现抓取302跳转后页面的示例
  • PHP实现采集抓取淘宝网单个商品信息
  • 一个PHP实现的轻量级简单爬虫
  • PHP代码实现爬虫记录——超管用
  • PHP爬虫之百万级别知乎用户数据爬取与分析
  • 利用php抓取蜘蛛爬虫痕迹的示例代码
  • php与python实现的线程池多线程爬虫功能示例
  • PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端