为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 URI 数组从 php 发送到 python 并在那里打印

如何将 URI 数组从 php 发送到 python 并在那里打印

GCT1015 2021-09-14 10:34:52
我正在尝试将 URI 数组从我的 php 发送到我的 python 抓取工具。该数组包含要抓取的链接。我从这里得到了示例,它可以很好地发送整数数组,但是当我尝试使用 URI 填充数组时,出现了错误。php代码片段:$array = ["https://www.google.com/","https://www.google.com/","https://www.google.com/"];//$array = [1,2,3]; // This is worked fine$resultScript= system('python C:\xampp\htdocs\selenium\dummy.py '   .escapeshellarg(json_encode($array)));$resultData = json_decode($resultScript, true);var_dump($resultData);Python :import sysimport jsondef jsontoarray(json_data):    data = json.loads(json_data)    print(json.dumps(data))jsontoarray(sys.argv[1])print(data)结果来自我的 IDETraceback (most recent call last):  File "C:\xampp\htdocs\selenium\dummy.py", line 8, in <module>    jsontoarray(sys.argv[1])  File "C:\xampp\htdocs\selenium\dummy.py", line 6, in jsontoarray    data = json.loads(json_data)  File "C:\Users\PC2\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 354, in loads    return _default_decoder.decode(s)  File "C:\Users\PC2\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 339, in decode    obj, end = self.raw_decode(s, idx=_w(s, 0).end())  File "C:\Users\PC2\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 357, in raw_decode    raise JSONDecodeError("Expecting value", s, err.value) from Nonejson.decoder.JSONDecodeError: Expecting value: line 1 column 3 (char 2)NULLProcess finished with exit code 0
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

正如这里所说,出现错误的原因如下:


json.decoder.JSONDecodeError:期望值:第 1 行第 3 列(字符 2)


可:


不符合 JSON 的引用

XML/HTML 输出(即以 < 开头的字符串),或

不兼容的字符编码

所以根据你所拥有的,我敢打赌存在编码问题。


查看您的 PHP 文件并确保它是 UTF-8 编码的。

检查 Python 脚本文件编码,如果您在下面的文件行的开头添加以强制正确编码,那将会很好。


# -*- coding: utf-8 -*-


所以你的python文件看起来像:


# -*- coding: utf-8 -*-

import sys

import json

def jsontoarray(json_data):

    data = json.loads(json_data)

    print(json.dumps(data))

jsontoarray(sys.argv[1])

另外为了调试,您可以打印以下类型sys.argv[1]:


print(type(sys.argv[1]))

你应该得到string或bytes(对于UTF-8)字符串。如果你有别的东西,你可以把它转换成字符串,比如:


str(sys.argv[1])


查看完整回答
反对 回复 2021-09-14
  • 1 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信