我正在使用Scrapy收集图像。我想在一个包含多个文件的PHP脚本上模拟一个帖子。与某人上载10个文件并使用true
的PHP脚本处理它们类似。我也想传递$_FILES['name']
数据。
这是我的Python。
$_POST
因此,这是假定使用多个文件创建一个 post_array={
'parse':'listing'
}
files_array=response.xpath(root+'/photos//url/text()').extract()
returned=requests.post(php-script.php,data=post_array,files=files_array).text
pprint(returned)
变量和一个$_POST
变量。如何将 files_array 中的URL列表转换为 php-script.php 中的$_FILES
数组?
Python数据输入:
$_FILES
将php-script.php内部的PHP数据输出(期望的结果):
post_array={
'parse':'listing'
}
files_array=['https://example.co/123.jpg','https://example.co/124.jpg','https://example.co/125.jpg']]
我也尝试过这个:
$_POST=['parse'=>'listing'];
$_FILES=['images'=>[
[0] => Array
(
[name] => 123.jpg
[type] => image/jpeg
[tmp_name] => /tmp/php/php6hst32
[error] =>
[size] => 98174
)
[1] => Array
(
[name] => 124.jpg
[type] => image/jpeg
[tmp_name] => /tmp/php/php6hst32
[error] =>
[size] => 98174
)
[2] => Array
(
[name] => 125.jpg
[type] => image/jpeg
[tmp_name] => /tmp/php/php6hst32
[error] =>
[size] => 98174
)
]];
答案 0 :(得分:1)
在PHP脚本中将URL列表转换为$_FILES
数组的唯一方法是实际上传这些文件(通过带有enctype="multipart/form-data"
的POST请求)。
这是使用requests
的方法:
files_array = [('images', ('123.jpg', open('123.jpg', 'rb'), 'image/jpeg')),
('images', ('124.jpg', open('124.jpg', 'rb'), 'image/jpeg')),
('images', ('125.jpg', open('125.jpg', 'rb'), 'image/jpeg'))]
r = requests.post(url, data=post_array, files=files_array)
中找到详细的示例
答案 1 :(得分:0)
Scrapy还没有文件上传支持,因此您必须build such requests manually,这对您来说可能并不简单。
为Scrapy has been requested添加了文件上传支持,并且有一个unfinished implementation您可以尝试甚至尝试完成。
无论您决定采用哪种方法,请注意,您将无法基于文件URL建立此类请求。要上传文件,您必须将其保存在计算机中;如果没有它,则必须下载它。