zoukankan      html  css  js  c++  java
  • TP5.1 爬虫

    环境

    PHP >= 7.1 !!!
    PHP >= 7.1 !!!
    PHP >= 7.1 !!!

    安装

    composer require jaeger/querylist

    后端

    // 爬虫
        public function crawler()
        {
            if(request()->post()){
                $url = $this->param['url'];
                $range = $this->param['range'];
                $pageS = $this->param['pageS'];
                $pageE = $this->param['pageE'];
                $rules = [];
                foreach($this->param['content'] as $v){ if(!empty($v['field']) && !empty($v['tag']) && !empty($v['val'])) $rules[$v['field']] = [$v['tag'], $v['val']]; }
    
                // 循环从开始到结束每页数据
                $addVals = [];
                for($i = $pageS; $i <= $pageE; $i++){
                    $urls = str_replace('#', $i, $url);
                    $ql = QueryList::rules($rules)->range($range);
                    $data = $ql->get($urls)->queryData();
                    foreach($data as $v){ $addVals[] = $v; }
                    $ql->destruct();
                }
    
                // 爬取详情页
                foreach($addVals as $k => $v){
                    $info = $this->param['info'];
                    $info_data = QueryList::get(trim($v['source']))->rules([ $info['field'] => [$info['tag'], $info['val']] ])->queryData();
                    $addVals[$k][$info['field']] = $info_data[$info['field']];
    
                    // 这里写入库
    
                }
                QueryList::destructDocuments();
            }
            return $this->fetch();
        }

    前端

    <{include file="public/header" /}>
    </head>
    
    <body>
    <div class="layui-fluid">
        <div class="layui-row">
            <form class="layui-form" method="post">
    
                <div class="layui-form-item ">
                    <label class="layui-form-label">地址:</label>
                    <div class="layui-input-block">
                        <input type="text" id="url" name="url" autocomplete="off" class="layui-input" placeholder="url链接,分页用#表示,如:www.baidu-page#.com">
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <label class="layui-form-label">开始页数:</label>
                    <div class="layui-input-block">
                        <input type="text" id="pageS" name="pageS" autocomplete="off" class="layui-input" placeholder="开始页数(数字)">
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <label class="layui-form-label">结束页数:</label>
                    <div class="layui-input-block">
                        <input type="text" id="pageE" name="pageE" autocomplete="off" class="layui-input" placeholder="结束页数(数字)">
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <label class="layui-form-label">列表断点:</label>
                    <div class="layui-input-block">
                        <input type="text" id="range" name="range" autocomplete="off" class="layui-input" placeholder="支持标签、class,如:span、.class、#id">
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <label class="layui-form-label">详情地址:</label>
                    <div class="layui-input-block">
                        <input type="text" id="content[info][field]" name="content[info][field]" autocomplete="off" class="layui-input layui-disabled" value="source" placeholder="字段名">
                        <input type="text" id="content[info][tag]" name="content[info][tag]" autocomplete="off" class="layui-input" placeholder="支持标签、class,如:span、.class">
                        <input type="text" id="content[info][val]" name="content[info][val]" autocomplete="off" class="layui-input" placeholder="属性,如:href、src、text、html">
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <label class="layui-form-label">内容:</label>
                    <div class="layui-input-block">
                        <input type="text" id="content[0][field]" name="content[0][field]" autocomplete="off" class="layui-input" placeholder="字段名">
                        <input type="text" id="content[0][tag]" name="content[0][tag]" autocomplete="off" class="layui-input" placeholder="支持标签、class,如:span、.class">
                        <input type="text" id="content[0][val]" name="content[0][val]" autocomplete="off" class="layui-input" placeholder="属性,如:href、src、text、html">
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <div class="layui-input-block">
                        <button class="layui-btn" type="button" id="addC">
                            ===================================================================================================
                            添加内容模块
                            ===================================================================================================
                        </button>
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <label class="layui-form-label">内容详情:</label>
                    <div class="layui-input-block">
                        <input type="text" id="info[field]" name="info[field]" autocomplete="off" class="layui-input" placeholder="字段名">
                        <input type="text" id="info[tag]" name="info[tag]" autocomplete="off" class="layui-input" placeholder="支持标签、class,如:span、.class">
                        <input type="text" id="info[val]" name="info[val]" autocomplete="off" class="layui-input" placeholder="属性,如:href、src、text、html">
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <label for="L_repass" class="layui-form-label"></label>
                    <button class="layui-btn" lay-submit="" lay-filter="crawler">爬取</button>
                </div>
    
            </form>
        </div>
    </div>
    
    <!--包含footer文件-->
    <{include file="public/footer" /}>
    
    <!--请在下方写此页面业务相关的脚本-->
    <script type="text/javascript">
        let index_c = 2;
    
        layui.use(['form','layer'], function() {
            $ = layui.jquery;
            var form = layui.form
                , layer = layui.layer;
    
            //监听提交
            form.on('submit(crawler)', function (data) {
                $.ajax({
                    type: 'POST',
                    url: "<{:url('crawler')}>",
                    data: data.field,
                    dataType: 'json',
                    success: function (res) {
                        layer.msg(res['msg'], {
                            icon: 1, time: 1000,
                        });
                    }
                });
                return false;
            });
    
        })
    
        $(function(){
            addC()
        });
    
        function addC(){
    
            $("#addC").click(function(){
                var str = `
                    <div class="layui-form-item">
                        <label class="layui-form-label">内容:</label>
                        <div class="layui-input-block">
                            <input type="text" id="content[`+ index_c +`][field]" name="content[`+ index_c +`][field]" autocomplete="off" class="layui-input" placeholder="字段名">
                            <input type="text" id="content[`+ index_c +`][tag]" name="content[`+ index_c +`][tag]" autocomplete="off" class="layui-input" placeholder="支持标签、class,如:span、.class">
                            <input type="text" id="content[`+ index_c +`][val]" name="content[`+ index_c +`][val]" autocomplete="off" class="layui-input" placeholder="属性,如:href、src、text、html">
                        </div>
                    </div>
                `;
                $(this).parent().parent().before(str);
                index_c++
            })
        }
    
    
    </script>
    <!--/请在上方写此页面业务相关的脚本-->
    </body>
    </html>

    页面展示

  • 相关阅读:
    【从零开始】【Java】【3】改造成多模块项目
    atomic nonatomic区别
    UIBezierPath
    全局块、栈块、堆块
    动态修改可变数组元素
    layoutSubviews
    约束Constraints
    Objective-C实现一个简单的栈
    NSString 使用 copy、strong
    ARC中__weak;__strong;__unsafe_unretained;修饰词
  • 原文地址:https://www.cnblogs.com/zyfeng/p/14167517.html
Copyright © 2011-2022 走看看