使用 PHP CLI 命令行采集个股趋势信息

落日邮差
落日邮差
发布时间:2026-10-13 | 2人浏览过
原创

探讨如何使用 PHP 的命令行模式(CLI)构建一个简易的股票数据采集工具。该方法无需复杂的框架或服务器配置,仅需编写核心的抓取类与调度脚本,即可在终端直接查询个股详情。通过自定义模板提取名称、评分与趋势标签,并利用批处理文件实现批量任务执行,将结果保存为文本文件后便于导入 Excel 等表格软件进行深入分析。

实现目标与准备

本方案旨在解决需要在本地环境下快速获取股票基础指标和趋势判断的需求。相比图形界面的操作,命令行方式更利于自动化处理和批量作业。主要依赖 file_get_contents 函数获取网页源码,利用正则表达式提取关键结构化数据。确保环境已安装 PHP,并能直接在终端运行 php 命令。

核心代码逻辑

第 1 步:定义数据采集类 StockClass

目的:封装 HTTP 请求、HTML 解析及数据格式化逻辑,提供统一的接口供外部调用。
入口:新建文件 stock.class.php。

该类接收股票代码作为初始化参数,内部包含获取页面内容和正则匹配的私有方法。核心功能在于 getInfo 方法,它接受一个包含占位符的模板字符串,自动替换为对应的股票数据字段。

<?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 '<div class="txt-aside">' . $name . ':</div>\s*<div class="txt-main">([^<]*)</div>';
 }
 
 //支持的标签
 private function name($html){
  return $this->match("<title>([^\(<]*)\(", $html, 1);
 }
 private function score($html){
  return $this->match('<span class="analyze-num">(\d+(\.\d+)?)</span>', $html);
 }
 private function tips($html){
  return $this->match('<span class="analyze-tips">([^<]*)</span>', $html);
 }
 private function qushishort($html){
  return $this->match($this->qushiPattern("短期趋势"), $html);
 }
 private function qushimiddle($html){
  return $this->match($this->qushiPattern("中期趋势"), $html);
 }
 private function qushilong($html){
  return $this->match($this->qushiPattern("长期趋势"), $html);
 }
}
?>

注意:mb_convert_encoding 的使用是为了适配 Windows 命令行默认的控制台编码(通常为 GBK),防止输出乱码。若在其他系统下运行,可根据实际控制台编码调整参数。

第 2 步:创建命令行调用脚本 stock.php

目的:作为程序入口,接收用户输入的股票代码,实例化类并渲染模板。
入口:新建文件 stock.php。

脚本通过超全局变量 $argv 获取传入的参数。校验参数数量后引入核心类,构建包含占位符的输出格式,并打印最终结果。

<?php
 
 if(count($argv) >= 2){
 require("stock.class.php");
 $stockId = $argv[1];
 $stock = new StockClass($stockId);
 $temp = $stockId;
 $temp .= " {name}"; //名称
 $temp .= " {score}"; //评分
 $temp .= " {tips}"; //描述
 $temp .= " {qushishort}"; //短期趋势
 $temp .= " {qushimiddle}"; //中期趋势
 $temp .= " {qushilong}"; //长期趋势
 //$temp .= " {zidingyi}"; //自定义,直接在StockClass增加zidingyi方法即可
 $temp .= "\n";
 echo $stock->getInfo($temp);
 }
?>

快捷调用与批量处理

第 3 步:简化单次查询命令

目的:避免每次都在命令行输入冗长的 PHP 解释器路径。
操作:创建一个名为 stock.cmd (Windows 环境)或 stock.sh (Linux/Mac 环境)的文件。

以 Windows 为例,编辑 stock.cmd 内容如下:

@XXX\php.exe stock.php %1

将 XXX 替换为实际的 PHP 安装路径。此后只需在终端运行 stock 000001 即可直接查看结果。

第 4 步:执行批量采集任务

目的:对多只股票进行循环查询,并将结果汇总保存至文件以便后续分析。
操作:创建批量处理脚本 batch.cmd。

使用 call 命令逐行调用之前的查询脚本,并追加不同的股票代码:

@echo off
call stock 000001
call stock 000002
call stock 000003
call stock 000004
call stock 000005
call stock 000006
call stock 000007
call stock 股票代码n...

完成判断:双击运行该脚本,或在终端执行 batch.cmd > log.txt。最后一步的重定向符号会将所有屏幕输出的内容保存为 log.txt 文本文件。打开此文件,可以看到格式化后的股票列表数据。

总结与注意事项

该方案利用 PHP 强大的文本处理能力,以极低的资源消耗实现了特定的数据采集需求。由于涉及网页结构的直接匹配,若目标网站的 HTML 结构发生变动(如 CSS 类名修改),相应的正则表达式可能需要同步更新以适应新的页面布局。

以上就是利用 PHP 命令行模式采集股票趋势信息的详细内容,更多关于 PHP 命令行开发技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表