0

0

share 一段小说的采撷代码

php中文网

php中文网

发布时间:2016-06-13 10:51:00

|

1242人浏览过

|

来源于php中文网

原创

share 一段小说的采集代码。
最近用火车头,ET采集小说,按他们的规则经常配不出来。碰到像小说520 里面的用iframe 的直接挂掉,只有自己写了一个,刚开始觉得就两正则解决[列表,内容]的事,写着写着便复杂起来了。
好好的改了几版,碰到最大的麻烦,,如何封装代码,就是采不同站时改动成本较小。这里小小的用了一个决策者模式。然后把该封装的功能一封。以及再次采集时,对已采集的章节的跳过机制,避免重采[毕竟一个小说站好几w篇文章,中断一次,接不上去,是很郁闷的事]

PHP code
class grep extends Controller {    var $tableName = 'grep';    var $pagesize =31;    var $order_string = "grep_order desc,grep_id desc";    var $filter_field = "grep_title";    var $check_repeat_field = "grep_title";     var $buttons = array(     );     var $description = "[爬取小说]";    function index(){    //get the story list        $story_model = "story_model";    $this->load->model($story_model);    $where = array("story_id $story_model->get($where);            foreach ($rows_story as $key=>$val_story):    if($key storycate_vtitle."/".$val_story->story_vtitle;        $src_content = file_get_contents($url);        $src_content = iconv("GBK","utf-8//IGNORE",$src_content);                            $src_content = str_replace("/style=\"border-width:0px\s*1px\s*1px\s*0px;border-color:#C8D8B8;border-style:solid;padding:3px;float:left;width:313px;\"/i","",$src_content);            $src_content = str_replace("style=\"BORDER-RIGHT: #c8d8b8 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #c8d8b8 0px solid; PADDING-LEFT: 3px; FLOAT: left; PADDING-BOTTOM: 3px; BORDER-LEFT: #c8d8b8 0px solid; WIDTH: 313px; PADDING-TOP: 3px; BORDER-BOTTOM: #c8d8b8 1px solid\"","",$src_content);                          $src_content = preg_replace("/title=\"[^\"]*\"/iU","",$src_content);              $src_content = preg_replace("/title=\"[^\"]*\"/iU","",$src_content);            $src_content = preg_replace("/
  • ]*>/iU","",$src_content); $src_content = preg_replace("/]*>/iU","",$src_content); $src_content = preg_replace("//iU",$src_content,$arr_dstorycate); $dstorycate_arr = $arr_dstorycate[1]; foreach ($dstorycate_arr as $key_dstorycate => $val_dstory_cate) { preg_match_all("/([^/i",$val_dstory_cate,$dcate_title); $datacate["dstorycate_pid"] = $val_story->story_id; $datacate["dstorycate_title"] = $dcate_title[1][0]; //获取类别对象,记将之前的类别标置为已下载 $dtitle =$datacate["dstorycate_title"]; $obj_storycate = $this->check_dcate($dtitle,$val_story ); //pr($obj_storycate); if($obj_storycate->dstorycate_ishot == 1) { $this->log( "已此章节已抓取完 $val_story->story_title - $dtitle ,跳过"); continue; } preg_match_all("/]*>(?!)([\d\D]*)/iU",$val_dstory_cate,$dinfo_list); $list_story_url = $dinfo_list[1]; $list_story_title = $dinfo_list[2]; $story_url = "http://www.xiaoxiaoshuo.net/".$val_story->storycate_vtitle."/".$val_story->story_vtitle; $this->add_storyxxs_info($obj_storycate,$list_story_url,$list_story_title,$story_url); } endforeach; } function status(){ $sql = "select count(dstory_id) as all_story from dstory;"; $query = $this->db->query($sql); $cont_all = $query->row(); echo $cont_all->all_story; $sql = "select count(dstory_id) as story1 from dstory where dstory_status = 1"; $query = $this->db->query($sql); $cont_all = $query->row(); echo "--".$cont_all->story1; $sql = "select max(dstorycate_id) as max_id,max(dstorycate_pid) as max_pid from dstorycate"; $query = $this->db->query($sql); $cont_all = $query->row(); echo "--".$cont_all->max_id."--".$cont_all->max_pid; } /** * *下载445后的章节 * */function index445(){ $story_model = "story_model";$this->load->model($story_model);$where = array("story_id > 445");$rows_story = $this->$story_model->get($where);foreach ($rows_story as $key=>$val_story): //get the story_content$story_url_arr = explode("/",$val_story->story_url);$story_url= $story_url_arr[1]."/".$story_url_arr[2]."/".$story_url_arr[3]."/".$story_url_arr[4];$dest_url = "http://www.xiaoshuo520.com/".$story_url;$src_content = CS_file_get_contents($dest_url);$src_content = iconv("GBK","utf-8//IGNORE",$src_content); //按类别进行分类分组数据. preg_match_all("/(
    [\d\D]*)
    $val_dstory_cate){ preg_match_all("/
    ([\d\D]*)/i",$val_dstory_cate,$dcate_title); $datacate["dstorycate_pid"] = $val_story->story_id; $datacate["dstorycate_title"] = $dcate_title[1][0]; //获取类别对象,记将之前的类别标置为已下载 $dtitle =$datacate["dstorycate_title"]; $obj_storycate = $this->check_dcate($dtitle,$val_story ); //pr($obj_storycate); if($obj_storycate->dstorycate_ishot == 1) { $this->log( "已此章节已抓取完 $val_story->story_title - $dtitle ,跳过"); continue; } preg_match_all("/]*>(?!)([\d\D]*)/iU",$val_dstory_cate,$dinfo_list); $list_story_url = $dinfo_list[1]; $list_story_title = $dinfo_list[2]; $this->add_story520_info($obj_storycate,$list_story_url,$list_story_title,$story_url);}endforeach;}/** * 根据章节标准 和小说对象,获取标题对象 * */function check_dcate($title,$obj_story){ $dstorycate_model = "dstorycate_model"; $this->load->model($dstorycate_model); $where = array("dstorycate_pid = $obj_story->story_id","dstorycate_title = '$title'"); $rows = $this->$dstorycate_model->get($where); if(!$rows) { $datacate["dstorycate_pid"] = $obj_story->story_id; $datacate["dstorycate_title"] = $title; $this->$dstorycate_model->insert($datacate); $obj_cate_id = $this->db->insert_id(); $where = array("dstorycate_id = $obj_cate_id","dstorycate_title = '$title'"); $rows = $this->$dstorycate_model->get($where); $this->log( "此书没有相关类别,将进行添加 小说$obj_story->story_title - $title "); }else { $this->log( "已存在相关小说类别 $obj_story->story_title - $title ,跳过"); } $obj_cate = $rows[0]; $sql = "update dstorycate set dstorycate_published = 1 where dstorycate_pid = $obj_story->story_id && dstorycate_id dstorycate_id "; $this->db->query($sql); return $obj_cate;}/*** *添加小说对旬 */function add_story520_info($cate_obj,$list_story_url,$list_story_title,$url){ $dstory_model = "dstory_model"; $this->load->model($dstory_model); $min_key = intval($cate_obj->dstorycate_pvcount); if(!$min_key) $min_key = 0 ; foreach($list_story_url as $key=>$val): if($key check_dstory($cate_obj,"http://www.xiaoshuo520.com/".$url."/".$val,$list_story_title[$key],"grep_520_info"); endforeach;}function add_storyxxs_info($cate_obj,$list_story_url,$list_story_title,$url){ $dstory_model = "dstory_model"; $this->load->model($dstory_model); $min_key = intval($cate_obj->dstorycate_pvcount); if(!$min_key) $min_key = 0 ; foreach($list_story_url as $key=>$val): if($key log("$cate_obj->dstorycate_id 号 $cate_obj->dstorycate_title ".$list_story_title[$key]." 章 $key check_dstory($cate_obj,$url."/".$val,$list_story_title[$key],"grep_xxs_info"); endforeach; }
  • 相关文章

    小说app
    小说app

    丰富的小说app资源,提供海量正版小说。还有金币福利,看书能挣钱!有需要的小伙伴快来保存下载体验吧!

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    php源码安装教程大全
    php源码安装教程大全

    本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

    150

    2025.12.31

    php网站源码教程大全
    php网站源码教程大全

    本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

    88

    2025.12.31

    视频文件格式
    视频文件格式

    本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

    90

    2025.12.31

    不受国内限制的浏览器大全
    不受国内限制的浏览器大全

    想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

    61

    2025.12.31

    出现404解决方法大全
    出现404解决方法大全

    本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

    493

    2025.12.31

    html5怎么播放视频
    html5怎么播放视频

    想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

    16

    2025.12.31

    关闭win10系统自动更新教程大全
    关闭win10系统自动更新教程大全

    本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

    12

    2025.12.31

    阻止电脑自动安装软件教程
    阻止电脑自动安装软件教程

    本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

    5

    2025.12.31

    html5怎么使用
    html5怎么使用

    想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

    2

    2025.12.31

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Excel 教程
    Excel 教程

    共162课时 | 10.4万人学习

    Pandas 教程
    Pandas 教程

    共15课时 | 0.9万人学习

    C# 教程
    C# 教程

    共94课时 | 5.8万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号