PHP命令行采集所有股票趋势信息程序

作者:袖梨 2022-06-24

最近帮朋友写了一个简单的股票采集工具,采集的同花顺股票趋势信息,使用php命令行模式编写。只完成了采集部分功能,将输出的数据复制到execl(或ET)分析,比任何后台都方便。

主要函数只有一个类实现(stock.class.php):

    class StockClass{
        public $stockId;
        
        public function __construct($stockId){
            $this -> stockId = $stockId;
        }
        
        private function getUrl(){
            return "http://stockpage.10jqka.com.cn/" . $this -> stockId . "/";
        }
        
        private function getPage(){
            return file_get_contents($this -> getUrl());
        }
        
        //核心,通过正则匹配出 标签名,并将对应的方法的结果替换掉标签占位符
        public function getInfo($template){
            $html = $this -> getPage();
            if( preg_match_all("/{([^}]*)}/", $template, $result) ){
                foreach($result[1] as $index => $fun){
                    $template = str_replace($result[0][$index], $this -> $fun($html), $template);
                }
            }
            return mb_convert_encoding($template, "GBK", "UTF-8");  //Windows的命令提示符编码是GBK
        }
        
        private function match($pattern, $html, $itemIndex = 1){
            $pattern = '/' . str_replace('/', '/', $pattern) . '/';
            if( preg_match($pattern, $html, $result) ){
                return $result[$itemIndex];
            }else{
                return "-";
            }
        }
        
        //趋势的规则都一样,合并
        private function qushiPattern($name){
            return '

' . $name . ':
s*
([^<]*)
';
        }
        
        //支持的标签
        private function name($html){
            return $this -> match("([^(<]*)(", $html, 1);<br />         }<br />         private function score($html){<br />             return $this -> match('<span class="analyze-num">(d+(.d+)?)</span>', $html);<br />         }<br />         private function ti<a href="/fw/photo.html" target="_blank">ps</a>($html){<br />             return $this -> match('<span class="analyze-tips">([^<]*)</span>', $html);<br />         }<br />         private function qushishort($html){<br />             return $this -> match($this -> qushiPattern("短期趋势"), $html);<br />         }<br />         private function qushimiddle($html){<br />             return $this -> match($this -> qushiPattern("中期趋势"), $html);<br />         }<br />         private function qushilong($html){<br />             return $this -> match($this -> qushiPattern("长期趋势"), $html);<br />         }<br />     }<br /> ?></p> <p>命令提示符中的调用方法如下(stock.php):</p> <p><br /> <?php<br />      <br />     if(count($argv) >= 2){<br />         require("stock.class.php");<br />         $stockId = $argv[1];<br />         $stock = new StockClass($stockId);<br />         $temp = $stockId;<br />         $temp .= "  {name}";    //名称<br />         $temp .= "  {score}";   //评分<br />         $temp .= "  {tips}";    //描述<br />         $temp .= "  {qushishort}";  //短期趋势<br />         $temp .= "  {qushimiddle}"; //中期趋势<br />         $temp .= "  {qushilong}";   //长期趋势<br />         //$temp .= "    {zidingyi}";    //自定义,直接在StockClass增加zidingyi方法即可<br />         $temp .= "n";<br />         echo $stock -> getInfo($temp);<br />     }<br /> ?></p> <p>直接使用 *php.exe stock.php 股票代码即可实现调用,每次输入太长的,可以用批处理简化。将下面的代码保存为 stock.cmd。</p> <p><br /> @XXXphp.exe stock.php %1<br /> 运行结果:</p> <p> </p> <center><a href="https://img.111cn.net/uploads/20220923/img_632dad7b74ff130.jpg" class="js-smartPhoto-pc" target="_blank"><img alt="" src="https://img.111cn.net/uploads/20220923/img_632dad7b74ff130.jpg" /></a></center> <p>这样就完成了单个股票趋势的采集,如果要采集所有的股票信息,可以保存为批处理文件(batch.cmd)</p> <p>1</p> <p>@echo off<br /> call stock 000001<br /> call stock 000002<br /> call stock 000003<br /> call stock 000004<br /> call stock 000005<br /> call stock 000006<br /> call stock 000007<br /> call stock 股票代码n...<br /> 双击打开即可显示,如果想保存到文件,可以执行 batch.cmd > log.txt,然后将结果复制到 Execl(或ET)即可进行更负责的分析。</p> <center><a href="https://img.111cn.net/uploads/20220923/img_632dad7b9fc1831.jpg" class="js-smartPhoto-pc" target="_blank"><img alt="" src="https://img.111cn.net/uploads/20220923/img_632dad7b9fc1831.jpg" /></a></center> </div> </div> </section> <section class="wrap-box"> <div class="g-tit"> <h2>相关文章</h2> </div> <ul class="s-list nobord notop"> <li> <a href="/art-453443.htm" class="s-card"> <div class="s-card-l"> <p class="tit">阴阳师现世召唤算召唤次数吗 现世召唤和普通召唤的区别解析</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-08-03</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250801/logo_688c89582b4e81.jpg" alt="阴阳师现世召唤算召唤次数吗 现世召唤和普通召唤的区别解析" /> </div> </a> </li> <li> <a href="/art-453901.htm" class="s-card"> <div class="s-card-l"> <p class="tit">Gate集团战略突破:美国加密货币市场迎来新领导者</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-08-03</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250803/logo_688f45e2226ad1.png" alt="Gate集团战略突破:美国加密货币市场迎来新领导者" /> </div> </a> </li> <li> <a href="/art-453444.htm" class="s-card"> <div class="s-card-l"> <p class="tit">阴阳师现世召唤有up加成吗 阴阳师现世召唤概率介绍</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-08-03</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250801/logo_688c89587f4311.jpg" alt="阴阳师现世召唤有up加成吗 阴阳师现世召唤概率介绍" /> </div> </a> </li> <li> <a href="/art-453445.htm" class="s-card"> <div class="s-card-l"> <p class="tit">阴阳师现世召唤在哪 阴阳师现世召唤玩法介绍</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-08-03</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250801/logo_688c8958e4f321.jpg" alt="阴阳师现世召唤在哪 阴阳师现世召唤玩法介绍" /> </div> </a> </li> <li> <a href="/art-453446.htm" class="s-card"> <div class="s-card-l"> <p class="tit">原神魈主c最强队伍 魈主c阵容搭配2023</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-08-03</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250801/logo_688c89594871c1.jpg" alt="原神魈主c最强队伍 魈主c阵容搭配2023" /> </div> </a> </li> <li> <a href="/art-453447.htm" class="s-card"> <div class="s-card-l"> <p class="tit">原神魈没有钟离怎么配队 原神0命魈主c阵容无钟离阵容搭配</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-08-03</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250801/logo_688c8959ad0c91.jpg" alt="原神魈没有钟离怎么配队 原神0命魈主c阵容无钟离阵容搭配" /> </div> </a> </li> </ul> </section> <section class="wrap-box"> <div class="g-tit"> <h2>精彩推荐</h2> </div> <ul class="card-box"> <li class="card3"> <a href="/app/129251.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250731/logo_688ad006391391.jpg" alt="酷跑大师" /> </div> <p class="figure-head">酷跑大师</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="/app/129260.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250731/logo_688ad00dd38651.jpg" alt="绝地英雄求生" /> </div> <p class="figure-head">绝地英雄求生</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="/app/129269.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250731/logo_688ad013b33d31.jpg" alt="火柴人超级绳索英雄" /> </div> <p class="figure-head">火柴人超级绳索英雄</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="/app/129628.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250801/logo_688c20d040e2f1.png" alt="动物秘境" /> </div> <p class="figure-head">动物秘境</p> <span class="figure-btn">下载</span> </a> </li> </ul> <ul class="card-box-b"> <li class="card10"> <a href="/app/128355.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250729/logo_68882c497db191.png" alt="狮子模拟器" /> </div> <div class="figure-cont"> <p class="figure-head">狮子模拟器</p> <div class="figure-desc"> <span>模拟经营</span> <span>狮子模拟器</span> </div> <div class="figure-desc"> <p>狮子模拟器让你化身为草原之王,探索广阔的非洲大地,感受野性生</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="/app/129272.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250731/logo_688ad0168ae3e1.jpg" alt="卡车真实驾驶模拟" /> </div> <div class="figure-cont"> <p class="figure-head">卡车真实驾驶模拟</p> <div class="figure-desc"> <span>模拟经营</span> <span>卡车真实驾驶模拟</span> </div> <div class="figure-desc"> <p>卡车真实驾驶模拟带你体验当司机的乐趣,开大卡车跑运输特别有意</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="/app/129626.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250801/logo_688c20cd387971.png" alt="酒店大师" /> </div> <div class="figure-cont"> <p class="figure-head">酒店大师</p> <div class="figure-desc"> <span>模拟经营</span> <span>酒店大师</span> </div> <div class="figure-desc"> <p>酒店大师让你从打扫卫生接待客人开始,一步步累积资金扩大规模,</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="/app/125951.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250722/logo_687ef1fb9d5c61.png" alt="超级跑车收藏模拟器" /> </div> <div class="figure-cont"> <p class="figure-head">超级跑车收藏模拟器</p> <div class="figure-desc"> <span>模拟经营</span> <span>超级跑车收藏模拟器</span> </div> <div class="figure-desc"> <p>超级跑车收藏模拟器让你成为车库经营达人,通过购买和出售超级跑</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="/app/129634.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250801/logo_688c20d988ee91.jpg" alt="美味料理小当家" /> </div> <div class="figure-cont"> <p class="figure-head">美味料理小当家</p> <div class="figure-desc"> <span>模拟经营</span> <span>美味料理小当家</span> </div> <div class="figure-desc"> <p>美味料理小当家游戏挺有意思的,从破烂小店开始经营餐厅。先把店</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> </ul> </section> <footer class="foot"> <a href="/" class="logo-icon"> <img src="/mobile/images/logo2.png" alt="一聚教程网"> </a> <p>Copyright © 2010-2022</p> <p>111cn.net All Rights Reserved</p> </footer> <script> var advData = {"img_fixed_pc_adv":"https:\/\/img.111cn.net\/uploads\/20240509\/663c2e9729f58.jpg","img_fixed_mob_adv":"https:\/\/img.111cn.net\/uploads\/20240509\/663c2e8793225.jpg","url_adv":"http:\/\/shop.hushen.cn\/shop\/c\/baojianpin.html","str_adv":"\u864e\u795e\u5546\u57ce\uff1a\u5173\u7231\u7537\u6027\uff0c\u66f4\u61c2\u7537\u4eba\u3002\u89e3\u51b3\u5927\u4f17\u7684\u7537\u8a00\u4e4b\u9690","img_popup_adv":"https:\/\/img.111cn.net\/uploads\/20240509\/663c2e748238d.png","pc_show_img":"2","pc_show_popup":"2","pc_show_video":"2","mob_show_img":"2","mob_show_popup":"2","mob_show_video":"2","close_adv":"https:\/\/img.111cn.net\/uploads\/20240508\/663b20650801e.png","video_adv":"\/pc\/images\/pc-adv.mp4"}; </script> <script src="/jspc/funcmob.js" type="text/javascript"></script> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-DSRRGRV1TL"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-DSRRGRV1TL'); </script> <div class="back-top" style="display: block;"> <span class="icon-box"> <svg class="icon" viewBox="0 0 1024 1024"> <path d="M213.333333 640h170.666667v256h256v-256h170.666667l-298.666667-341.333333zM170.666667 128h682.666666v85.333333H170.666667z" fill="#0374f3"></path> </svg> </span> </div> </div> <script src="/js/stat.js"></script> </body> </html>