You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Laravel控制器中的$url变量传递至Python脚本?

解决方案:传递动态URL给Python脚本并提取网页表格

一、PHP端:传递URL作为命令行参数

修改原代码中调用Python脚本的部分,将生成的$url作为命令行参数传入:

$client = new Client();
$a = 'https://scholar.google.com/citations?user=';
$gscID = 'EnegzCwAAAAJ';//示例ID
$b = '&hl=en&oi=ao';
$url = $a . $gscID . $b;

// 修改Process参数,添加$url作为命令行参数
$process = new Process([
    'python', 
    public_path() . '\ext.py', 
    $url // 把动态生成的URL传给Python脚本
], null, ['SYSTEMROOT' => getenv('SYSTEMROOT'), 'PATH' => getenv("PATH")]);
$process->run();

if (!$process->isSuccessful()) {
    throw new ProcessFailedException($process);
}
$out[] = $process->getOutput();
dd($out);

二、Python端(ext.py):接收URL并提取表格

在ext.py中通过sys.argv获取传递的URL,然后使用网页解析库提取表格。以下是示例代码(需提前安装依赖:pip install requests pandas):

import sys
import requests
import pandas as pd

def extract_table_from_url(url):
    # 模拟浏览器请求,避免反爬拦截
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    response.raise_for_status() # 捕获请求错误

    # 读取页面中所有表格,取第一个(可根据实际调整索引)
    tables = pd.read_html(response.text)
    target_table = tables[0]

    # 转为制表符分隔的字符串,方便PHP接收解析
    return target_table.to_csv(sep='\t', index=False)

if __name__ == "__main__":
    # 校验参数是否存在
    if len(sys.argv) < 2:
        print("Error: 未传入URL参数")
        sys.exit(1)
    target_url = sys.argv[1]
    table_content = extract_table_from_url(target_url)
    print(table_content)

补充说明

  • 命令行参数传递URL是最直接的方式,无需额外处理文件或环境变量,适配动态URL场景
  • 若需要更精细的表格解析,可替换pandas为BeautifulSoup手动遍历<table>标签的行和列
  • 需确保Python环境已安装所需依赖,且PHP进程有权限调用Python命令

内容的提问来源于stack exchange,提问作者Ana Fernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:01:21