Python опубликовать несколько файлов из списка URL-адресов - PullRequest
1 голос
/ 21 марта 2019

Я использую Scrapy для сбора изображений. Я хотел бы смоделировать сообщение на PHP-скрипт с несколькими файлами Аналогично тому, когда кто-то загружает 10 файлов, и они обрабатываются PHP-скриптом, используя $_FILES['name']. Я также хотел бы передать данные $_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 с несколькими файлами. Как я могу преобразовать список URL-адресов в files_array в массив $_FILES в php-script.php ?

Ввод данных Python:

  post_array={
   'parse':'listing'
  }
  files_array=['https://example.co/123.jpg','https://example.co/124.jpg','https://example.co/125.jpg']]

в вывод данных PHP внутри php-script.php (желаемый результат):

$_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
    )
]];

Я тоже пробовал это:

returned=requests.post(triggers,data=post_array,files={'images':[url for url in files_array requests.get(url).content]}).text
pprint(returned)

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Единственный способ преобразовать список URL-адресов в массив $_FILES в PHP-скрипте - это фактически загрузить эти файлы (через запрос POST с enctype="multipart/form-data").

Здесь этокак это можно сделать с помощью 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)

Подробный пример можно найти в Документация по расширенному использованию для запросов

0 голосов
/ 21 марта 2019

Scrapy пока не поддерживает загрузку файлов, поэтому вам нужно создавать такие запросы вручную , что может быть не тривиально для вас.

Добавление поддержки загрузки файлов в Scrapy запрошено , и есть незаконченная реализация , которую вы можете попробовать или даже попробовать завершить.

Какой бы подход вы ни решили использовать, помните, что вы не сможете создавать такие запросы на основе URL-адресов файлов. Чтобы загрузить файл, вы должны иметь его на своем компьютере; если у вас его нет, вы должны загрузить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...