TP5.1 爬虫

摘要:
安装composerrequirejaeger/querylist backend//crawler publicfunctioncrawler(){if{$url=$this-˃param['url'};$range=$this-˃param['ange'〕;$pageS=$this-˃param['pageS‘];$pageE=$this-˃param['pageE‘];$rules=[];foreach{if(!
环境

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

安装
composer require jaeger/querylist
后端
//爬虫
    public functioncrawler()
    {
        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"   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"   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"   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"   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"   name="content[info][field]" autocomplete="off" class="layui-input layui-disabled" value="source" placeholder="字段名">
                    <input type="text"   name="content[info][tag]" autocomplete="off" class="layui-input" placeholder="支持标签、class,如:span、.class">
                    <input type="text"   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"   name="content[0][field]" autocomplete="off" class="layui-input" placeholder="字段名">
                    <input type="text"   name="content[0][tag]" autocomplete="off" class="layui-input" placeholder="支持标签、class,如:span、.class">
                    <input type="text"   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"   name="info[field]" autocomplete="off" class="layui-input" placeholder="字段名">
                    <input type="text"   name="info[tag]" autocomplete="off" class="layui-input" placeholder="支持标签、class,如:span、.class">
                    <input type="text"   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()
    });

    functionaddC(){

        $("#addC").click(function(){
            var str =`
                <div class="layui-form-item">
                    <label class="layui-form-label">内容:</label>
                    <div class="layui-input-block">
                        <input type="text"   name="content[`+ index_c +`][field]" autocomplete="off" class="layui-input" placeholder="字段名">
                        <input type="text"   name="content[`+ index_c +`][tag]" autocomplete="off" class="layui-input" placeholder="支持标签、class,如:span、.class">
                        <input type="text"   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>
页面展示

TP5.1 爬虫第1张

免责声明:文章转载自《TP5.1 爬虫》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ActiveRecord探索DatePicker新用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Web的几种上传方式总结

问题 文件上传在WEB开发中应用很广泛。 文件上传是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。 以下总结了常见的文件(图片)上传的方式和要点处理。 表单上传 这是传统的form表单上传,使用form表单的input[type=”file”]控件,可以打开系统的文件选择对话框,从而达到选择文件并上传的目的,它的...

input框中如何添加搜索

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" type="text/css" hr...

01 psutils模块运用

python3.6.7安装脚本 baim0手撸版 #!/bin/bash cd /opt yum update -y yum -y groupinstall "Development tools" yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sql...

form表单里的button调用js函数

          近来发现一个特别奇怪的问题:在form表单里,button的onclick事件无法调用js函数。代码如下(这段代码放在form标签里):                  dropUpdateAddress调用的js函数为:                   这个时候,“放弃修改”这个button是无法调用该js函数的。知道为什么吗?...

wireshark源码分析二

一、源代码结构 在wireshark源代码根目录下,可以看到以下子目录: 1)物理结构     其中,epan文件夹负责所有网络协议识别工作,plugins里面存放了wireshark所有插件,gtk文件夹里面是wireshark的界面部分代码,其余文件夹没有单独研究。 2)逻辑结构     下图给出了Ethereal功能模块:    a) GTK1/2...

Java大文件分片上传/多线程上传组件

javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求     1. 通过form表单向后端发送请求          <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" m...