Во многих задачах обработки изображений пост содержит изображения, которые должны быть сохранены в файл, чтобы иметь возможность работать над проблемой. Это особенно утомительное ручное задание. Мы, программисты, не должны подвергаться такой тяжелой работе. Ваша задача - автоматически загрузить все изображения, содержащиеся в вопросе Code Golf.SE.
правила
- Ваша программа может подключаться к любой части
stackexchange.com
, но не может подключаться к каким-либо другим доменам, за исключением расположения изображений (т. Е. Не беспокоиться об укорачивателе URL). - Целое число N задается в качестве входных данных в командной строке или в stdin.
- URL гарантированно является действительной ссылкой на вопрос Code Golf.
http://codegolf.stackexchange.com/questions/N
- Каждое изображение, отображаемое в теле вопроса N, должно быть сохранено в файл на локальном компьютере. Любое из следующих мест является приемлемым:
- Текущий каталог
- Ввод каталога пользователем
- Ваша программа не должна сохранять файлы, кроме изображений в теле вопроса (например, аватары пользователей или изображения, содержащиеся в ответах).
- Изображения должны быть сохранены с тем же расширением файла, что и оригинал.
Это код-гольф - напишите самую короткую программу, какую только сможете.
Критерий достоверности ответов
Существуют различные возможные крайние случаи с несколькими изображениями с одинаковым именем, текстом с тем же именем, что и у элементов HTML, и т. Д. Ответ будет признан недействительным только в том случае, если может быть показано, что он не выполнен, при некоторой ревизии вопроса, опубликованного до 10 января 2015 г. ,
Ответы:
Mathematica,
211210 байтUngolfed:
Это довольно просто. Я установил фильтр для API StackExchange, который возвращает только тело вопроса. Код извлекает информацию о вопросе с помощью этого фильтра и анализирует ее как JSON. Я выбираю правильный элемент (тело) и использую его
ImportString
для анализа HTML и отфильтровывания всех URL-адресов изображений.FileNameTake@#~Export~Import@#
затем загружает каждое из изображений и сохраняет его в текущем рабочем каталоге с тем же именем файла, что и в URL.Вы можете узнать текущий рабочий каталог с помощью
Directory[]
.В принципе, есть гораздо более короткая версия, потому что на
ImportString
самом деле можно скачать все файлы сразу, а не просто дать мне URL-адреса. Но затем я теряю информацию об исходном типе файла (посколькуImage
при загрузке они преобразуются в объекты), поэтому я могу сохранить их все как один и тот же тип (скажем, PNG).источник
Javascript -
149161 байтс пробелами
скрипт должен быть запущен с сайта stackexchange для работы.
По умолчанию будет отображаться текущая страница, если в приглашении не указан номер вопроса.источник
$('[src*="imgur"]',d)
я верю. Мне нравится, что это можно запустить в консоли - мгновенное удовлетворение.questions
может быть сокращен доq
, но он должен включатьcodegolf.stackexchange.com
часть, а не полагаться на то, чтобы быть на этой странице. @Josiah можно включать изображения из других доменов в сообщениях.#question .post-text img
может быть сокращен до.post-text:first img
или.post-text:eq(0) img
.Python 2 - 241 байт
Довольно просто, возможно, дальше можно играть в гольф. Я ищу на сайте все вхождения
img src=
между первым появлениемpost-text
и/div
сразу после этого. Каждый URL-адрес изображения затем читается и сохраняется в рабочем каталоге.источник
[-9:]
) URL-адреса изображения, в котором должно быть 5-символьное имя и a.png
или.jpg
т. Д. Оно будет отрезать байты имени файла, если расширение длиннее 3 символов. ,for
цикл одной строкой.for p re.findall(...):f=open(...);f.write(...)
Mathematica, 195
Это экспортирует изображения таким же образом, как это делал Мартин в своем решении Mathematica, прочитайте его ответ для получения дополнительной информации об этом. Этот подход очень отличается от его, вместо того, чтобы анализировать результат API, я анализирую HTML-страницу напрямую. Вернее, я анализирую символический XML, который Mathematica может генерировать из HTML.
источник
Python 2 -
398342334 байтаПрограмма загружает страницу SE, извлекает часть записи (элемент div текста после записи), находит URL-адреса, заканчивающиеся расширением изображения, и загружает их. Изображения сохраняются как
img<n>.<ext>
в текущем каталоге.Эта программа также будет загружать изображения, которые поставляются в виде ссылки, а не только встроенные изображения. Придавая каждому изображению уникальное имя файла, также избегаются конфликты имен.
источник
questions
сq
(в URL).Баш - 86 байт
Ничто не может исправить.
-np
не позволяет wget входить в верхние каталоги (User Imgs)-A
только захватывает файлы с расширением, соответствующим представленному списку.-r
это рекурсивная загрузка.-l
предотвращает слишком глубокое проникновение wget$1
это вопрос, чтобы схватить.источник
questions
сq
в URL.Node.js,
251247 байтИспользуется
request
для создания HTTPGET
иcheerio
анализа HTML. Конфликты имен разрешаются путем добавления индекса текущего изображения к базовому имени URL файла. Изображения сохраняются в том же каталоге, что и текущий файл.источник
Lua, 200 байт
Принимает число в качестве аргумента командной строки.
Предполагается, что любой
src=
атрибут будет дляimg
тега, поскольку это единственные теги сsrc
атрибутами, которые допускает обмен стека (верно?).Также обратите внимание
.. ...
. Я особенно горжусь этим.источник