Python从URL列表中发布多个文件

时间:2019-03-21 00:05:25

标签: php python scrapy

我正在使用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
    )
]];

2 个答案:

答案 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)

您可以在Advanced Usage documentation for Requests

中找到详细的示例

答案 1 :(得分:0)

Scrapy还没有文件上传支持,因此您必须build such requests manually,这对您来说可能并不简单。

为Scrapy has been requested添加了文件上传支持,并且有一个unfinished implementation您可以尝试甚至尝试完成。

无论您决定采用哪种方法,请注意,您将无法基于文件URL建立此类请求。要上传文件,您必须将其保存在计算机中;如果没有它,则必须下载它。