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-460120.htm" class="s-card"> <div class="s-card-l"> <p class="tit">诛仙2夔牛怎么打 异兽夔牛副本打法</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-08-28</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250828/logo_68afb900deabf1.png" alt="诛仙2夔牛怎么打 异兽夔牛副本打法" /> </div> </a> </li> <li> <a href="/art-460121.htm" class="s-card"> <div class="s-card-l"> <p class="tit">远光84物资箱怎么获取 物资箱获取方法分享</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-08-28</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250828/logo_68afb90284f7d1.png" alt="远光84物资箱怎么获取 物资箱获取方法分享" /> </div> </a> </li> <li> <a href="/art-460123.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-28</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250828/logo_68afb9a799a231.png" alt="和平精英薄荷星砂头盔怎么获得-和平精英薄荷星砂头盔获取方法介绍" /> </div> </a> </li> <li> <a href="/art-460124.htm" class="s-card"> <div class="s-card-l"> <p class="tit">最终幻想14水晶世界沙斯塔夏溶洞怎么打 沙斯塔夏溶洞打法教学</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-08-28</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250828/logo_68afba0737d741.jpg" alt="最终幻想14水晶世界沙斯塔夏溶洞怎么打 沙斯塔夏溶洞打法教学" /> </div> </a> </li> <li> <a href="/art-460125.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-28</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250828/logo_68afba08001e31.jpg" alt="漫画群星大集结我妻善逸怎么样 我妻善逸介绍一览" /> </div> </a> </li> <li> <a href="/art-460126.htm" class="s-card"> <div class="s-card-l"> <p class="tit">下一站江湖2逍遥丸怎么获取 逍遥丸获取攻略</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-08-28</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250828/logo_68afba08806b11.jpg" alt="下一站江湖2逍遥丸怎么获取 逍遥丸获取攻略" /> </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/127737.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250728/logo_6886ce1ccc1961.png" alt="心灵守护者" /> </div> <p class="figure-head">心灵守护者</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="/app/136996.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250827/logo_68aead6294c0c1.png" alt="恐怖解谜大作战" /> </div> <p class="figure-head">恐怖解谜大作战</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="/app/137001.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250827/logo_68aead6a9753c1.png" alt="都市机械乱斗" /> </div> <p class="figure-head">都市机械乱斗</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="/app/136887.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250827/logo_68ae66f9b0fbe1.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/125313.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250721/logo_687d933b83bbb1.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/136875.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250827/logo_68ae66ef0a3291.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/136885.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250827/logo_68ae66f6985591.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/136894.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250827/logo_68ae6700b05da1.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/136901.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250827/logo_68ae6706430e51.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>