1 ( 10-02-2018 17:35:14 змінене Dark_Timur )

Тема: Скачиваем документы из ОБД Мемориал

Добрый день,

Напоминаю, ОБД Мемориал, - это российский ресурс, предоставляющий возможность посмотреть различные оцифрованные документы, связанные с судьбами советских военных в период второй мировой войны.

Многим, думаю, было бы достаточно одной страницы с информацией на нужного им человека, но я человек дотошный smile . Я стараюсь скачивать не лишь одну страницу, а документы целиком. Я бы хотел написать, как это делается.

Шаг 1. Скачиваем материал.

Небольшой ликбез по поводу используемых здесь терминов:

Документ - Какой-то материал, который уникален по отношению к другим материалам. Это может быть и книга, и подшитые донесения, и какой-нибудь буклет.
Страница - одна из многих (если их больше одной) страниц документа
Слеш - так элегантно и кратко называется косая линия, - "\" или "/"

+ Способ 1 - ручной (пока единственный)

Легче объяснить на примере. Вот, например, нас интересует какой-нибудь абстрактный Симонов Николай Никитович

1. Жмем на "Посмотреть донесение". Попадаем на энную страницу документа. В нашем случае, на 36 страницу 37-страничного документа.
2. Создаем новую пустую папку у себя. Можно назвать как угодно, например, "Мой документ с мемориала"
3. Выбираем первую страницу документа

4. Жмем на иконку дискеты (иконку сохранения картинки) и скачиваем картинку в эту папку.
5. Переходим на следующую и повторяем п4 пока все картинки не будут скачаны по ссылке

6. Казалось бы, всё. А вот нет. На самом деле, сайт Мемориала хитрит - он показывает не все страницы документа. С чем это связано можно гадать, может, им так удобнее для сортировки, может им так кажется логичным, а может они что-то специально скрывают из виду. Как бы то ни было, к счастью, эта проблема не так сложно устраняется. Но нам понадобится подсобрать информацию. Я буду вдаваться в детали чуть ниже, а пока напишу, что нам нужно, чтобы скачать документ целиком. Жирным отмечено, что нас интересует.

6.1. Итак, собираем информацию
Во-первых, смотрим, по какой ссылке мы скачивали изображения. Например, на нашем примере, изображение страницы 25 находится по адресу:

obd-memorial.ru/memorial/fullimage?id=1493533&id1=0e3f45f74bf7162adc8a6ea44398e44c&path=VS/001/058-0818883-0287/00000035.jpg

(то есть всё, что идет после "path="  и до последнего слеша)


Во-вторых, смотрим, по какой ссылке находится первая страница документа. Например, на нашем примере:

obd-memorial.ru/memorial/fullimage?id=1493509&id1=8b28e7b27dec76f8c0a1dbae52bc5a43&path=VS/001/058-0818883-0287/00000011.JPG

(то есть всё, что идет после последнего слеша и до расширения файла (до точки) )


В-третьих, смотрим, что у нас по ссылке на документ. Например, на нашем примере:

obd-memorial.ru/html/info.htm?id=1493508&page=1

(то есть, нас интересует число, которое идет после "id=")


Теперь обяъясню, как нам это все пригодится. Опять же, на примере, чтобы было понятнее.

Итак мы имеем:
Во-первых,

VS/001/058-0818883-0287

Это как бы уникальный код документа внутри ОБД-Мемориала. Как это понять? Вернемся на страницу нашего  Симонова Николая Никитовича (почему-то нижеописанное отображается только там, хотя по идее должно быть и в донесении, но, честно говоря, ОБД Мемориал - это немного страна чудес)
Что мы видим?

Номер фонда источника информации    58    
Номер описи источника информации    818883    
Номер дела источника информации    287

Теперь сравним с тестом выше. Замечаете? Номера фонда, описи и дела источника информации идут поочередно через дефисы! Иначе говоря, то, что написано после "path=" - это, хотя и путь до изображений документа, но еще и уникальный идентификатор, идентифицирующий интересующий нас документ.

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

Во-вторых,

00000011

Это у нас имя первой по ссылке картинки. Все в порядке, но не замечаете, почему первая картинка идет под номером 11. От себя скажу, что как правило, если первая картинка не идет под номером 1, то это означает, что скорее всего есть еще какие-нибудь ссылки, по которым можэно найти еще страницыв этого документа.

В-третьих,

1493508

Это номер из нашей текущей ссылки на документ. Он пригодится чуть ниже, а пока неплохо было бы записать его в блокнот себе.

7. Итак, у нас же 1 страница идет под номером 11, не так ли? Значит, скорее всего, есть еще иборажения для этого документа. Для начала пройдемся немного назад по ссылкам. У нас была ссылка с номером 1493508, так? То есть,

obd-memorial.ru/html/info.htm?id=1493508

Сейчас мыв пройдемся по соседним ссылкам. Вообще, по идее, чтобы найти недостающие страницы, следовало бы сканировать мемориал целиком, но по опыту, во всех случаях недостающие страницы находятся по соседним ссылкам.


7.1. Сначала пройдемся назад по ссылкам. Не буду долго разглагольствовать, а перейдем к делу:

* obd-memorial.ru/html/info.htm?id=1493507 - Ошибка (сайт выдает ошибку)
* obd-memorial.ru/html/info.htm?id=1493506 - Документ с 1 страницей. Проверяем, он относится к нам. Жмем на дискету, и видим "obd-memorial.ru/memorial/fullimage?id=1493507&id1=ac88151c38010284ee7d246d5555854e&path=VS/001/058-0818883-0287/00000010.JPG". Во-первых, то, что идет после "path=" совпадает с тем, что было раньше! Это самое главное. Во-вторых, файл называется "00000010", то есть "десятый", а до этого у нас был "одиннадцатый". Ну точно наш клиент! Скачиваем файл, он нам точно пригодится.
* www.obd-memorial.ru/html/info.htm?id=1493505 - Документ! Но посмотрите, - тут же есть кнопка "Посмотреть донесение"! Кликаем на нее , и попадаем на документ с 8 страницами. Не уж то это наши 8 страниц? Проверяем - что идет после "path=" совпадает с тем, что было раньше! Номера файлов тоже в соответствии с тем, что у вас уже есть. Ну что ж, берем в коллекцию.
* www.obd-memorial.ru/html/info.htm?id=1493504 - Документ, но тот же самый, что был выше, просто покрываюший другого одного отдельного человека. Пропускаем
* www.obd-memorial.ru/html/info.htm?id=1493503 - То же самое.
* www.obd-memorial.ru/html/info.htm?id=1493502 - То же самое.
* www.obd-memorial.ru/html/info.htm?id=1493501 - То же самое.
...
* www.obd-memorial.ru/html/info.htm?id=1493452 - То же самое
* www.obd-memorial.ru/html/info.htm?id=1493451 - То же самое
* www.obd-memorial.ru/html/info.htm?id=1493450 - То же самое
* www.obd-memorial.ru/html/info.htm?id=1493449 - Ошибка
* www.obd-memorial.ru/html/info.htm?id=1493448 - Ошибка
...
* www.obd-memorial.ru/html/info.htm?id=1493443 - Ошибка
* www.obd-memorial.ru/html/info.htm?id=1493442 - Ошибка
* www.obd-memorial.ru/html/info.htm?id=1493449 - Это наши 8 страниц, скачанные выше
* www.obd-memorial.ru/html/info.htm?id=1493440 - Ошибка
* www.obd-memorial.ru/html/info.htm?id=1493439 - Ошибка
* www.obd-memorial.ru/html/info.htm?id=1493438 - Еще 2 страницы. Проверяем (как выше) - это наши страницы. Скачиваем
* www.obd-memorial.ru/html/info.htm?id=1493437 - Документ! Проверяем, и находим что то, что идет после "path=" НЕ СОВПАДАЕТ! А именно не совпадает номер дела источника информации. Ну что ж, это не наш клиенть, значит не качаем
* www.obd-memorial.ru/html/info.htm?id=1493437 - Аналогично
* www.obd-memorial.ru/html/info.htm?id=1493436 - Аналогично
...
* www.obd-memorial.ru/html/info.htm?id=1493431 - Аналогично
* www.obd-memorial.ru/html/info.htm?id=1493430 - Аналогично

Можно, в принципе, и дальше продолжить, но я бы остановился. Уже явно другие документы пошли...

7.2. Теперь проводим аналогичные действия, но уже по ссылкам вперед.  Иначе говоря, на нашем примере, имея ссылку

obd-memorial.ru/html/info.htm?id=1493508

Проводим аналогичные действия для

obd-memorial.ru/html/info.htm?id=1493509
obd-memorial.ru/html/info.htm?id=1493510

И так далее

Шаг 2. Конвертируем в PDF

Этот шаг не обязательный . Но некоторым, в том числе и мне, приятнее, чтобы документы были одним, удобночитаемым файлом, а не рядом картинок.

Казалось бы, в чем проблема - скоррвертировать картинку в PDF. А проблема в том, что большинство программ выполняют эту операцию с потерями качества. Ниже будет описано, как это сделать без потерь. Замечу, что это мое оригинальное исследование. Но между тем описанная информация может пригодится для и не совсем архивных целей.

+ С помощью утилиты img2pdf

1. Сначала надо установить Python 3. Инструкцию по установке можно найти здесь. ВАЖНО установить Python версии 3.*, а не 2.7.
2. Устанавливаем img2pdf.

+ Установка img2pdf

2.1 Открываем командную строку. В ОС Windows можно открыть так: Жмем Win+R, потом вводим в появившиеся окно "cmd".
2.2 (Только для Windows) Переходим в нужную папку. Нужная папка у нас - папка, куда вы установили Python (обычно "C:\Python36" или что-то наподобие) , потом папка Scripts. Для перехода вводим команду cd. Итого у вас должно получится что-то вроде

cd C:\Python36\Scripts


2.3 Вводим

pip3 install img2pdf

2.4 Ждем пару минут smile. В результапте в папке "Scripts" должна появиться программа img2pdf

3. Нам понадобится узнать, к каким значением DPI изначально документ сканировался.

+ Справка: что такое DPI или зачем он нам нужен?

DPI - это такая величина, расшифровывается как dots-per-inch (рус. точки/дюйм). В нашем контексте величина указывает, сколько компьютерных точек отсканировано на один физический (реальный) дюйм.

Чем больше значение DPI, чем четче картинка, и тем лучше видны мелкие детали.

Как обычно, это звучит сложно в теории, но на практике все очень просто. Внизу приложу картинку, с которой, на мой взгляд, тема будет понятнее.
http://www.tech-express.com/templates_faqs/resolution-comparison.jpg
Для двухмерных картинок DPI бывает двух типов - вертикальный и горизонтальный. Соотвественно, если бы был 3D сканер, тогда DPI был бы не для двух, а для трех осей, но не будем идти в эти дебри smile .

Теперь, пожалуй, главный вопрос - для чего нам все это нужно? Все просто - PDF хранит информацию о том, какого размера идет страницы внутри него в реальном мире. Это нужно и удобно, например, для печати. Утилита img2pdf, получив значения вертикального и горизонтального значения DPI, для каждой добавляемой в PDF картинки будет создавать страницу со следующими физическими размерами (в дюймах):

Горизонтальный размер (дюймы): кол-во пикселей в картинке по горизонтали делить на горизонтальное значение DPI.
Вертикальный размер (дюймы): кол-во пикселей в картинке по вертикали делить на вертикальное значение DPI.

Если интересно, сколько это в сантиметрах, а не дюймах, то надо еще умножить получившиеся значения на 2.54 . 2.54 - это контанта, исходит из какого-то международного стандарта, декларирующего, что 1 дюйм = 2.54 см

Если значение DPI не узнавать, то img2pdf, для тех страниц, которых значение DPI неизвестно, будет считать, что значение DPI = 96 (по вертикали и горизонтали). Это приведет к тому, чсто часть страниц (формата PNG) будет очень маленькими по сравнению с другими (формата JPG).

+ Узнаем значения DPI

Как правило, вертикальное и горизонтальные значения DPI для сканов совпадают. По крайней мере, я ни разу не встречал, чтобы было иначе. Также в контексте мемориала, по опыту, все страницы одного документа отсканированы с одними и теми же значениями DPI.

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

+ Способ 1: С помощью метаданных изображений

Некоторые форматы изображений, в частности, JPEG, могут хранить значение DPI у себя в метаданных.

ВНИМАНИЕ! Почему-то встроенные средства Windows не способны получать DPI из метаданных PNG файлов, как, возможно, и из файлов других форматов (с JPG/JPEG форматом все нормально). Чтобы решить проблемы, используйте IrfanView!

+ "Встроенные функции OS Windows

Я использую Windows, поэтому знаю, как это делается там, про другие ОС ничего не могу сказать. Делается это очень просто: выбираем любое изображение (страницу нашего документа), которое в формате JPEG - жмем свойства. Далее жмем на вкладку "Описание" или "Детали" (не помню точное название этой вкладки) и видим там эти значения. Например, (картинка из интернета)
http://www.fmedda.com/sites/default/files/pic/screen_exif_dpi.png
На примере и вертикальное, и горизонтальное значение DPI равно 300.

Как правило, таким способом можно получить точное и правильное значение. Можно на всякий случай проверить еще пару картинок для душевного спокойствия.

+ С помощью программы IrfanView

Эта программа имеет встроенную функцию для просмотра свойств изображений. В частности, она способна распознавать значения горизонтального и вертикального DPI, в том чисмле и для файлов формата PNG.

1. Скачиваем программу с официального сайта. Программа бесплатна для некоммерческого пользования.
2. Открываем нужную нам картинку в программе.
3. Теперь жмем Английскую букву I. Или идем в Image - Information.
В открывшемся окне должны, помимо прочей информации, высветиться значения горизонтального и вертикального DPI.
http://www.filmscanner.info/BilderIrfanView/Bildinformation1.gif

+ Способ 2: Математический

DPI, как уже было написано, - это кол-во точек на дюйм, т.е. точки/дюйм.

Если нам известно, что какая-то страница документа какого-то формата (А4 или типа того), то DPI можно подсчитать так:

Горизонтальное значение DPI = Кол-во пикселей в картинке по горизонтали / Длина страницы по горизонтали в дюймах
Вертикальное значение DPI = Кол-во пикселей в картинке по вертикали / Длина страницы по вертикали в дюймах

Если формат страницы какой-то экзотический, и известны длины только в сантиметрах, то чтобы получить значение в дюймах, напдо разделить значение в сантиметрах на 2.54

Ну, в общем то и все. Иногда бывает, что известны какие-то другие данные, из которых можно извлечь длины сторон в реальном мире. В таких случаях вспомнимаем школьный курс геометрии smile

И еще. Таким образом, обычно получается примерное значение, например 294.333, 286 или 302.6 . Это нормально, возникать это может по разным причинам, будь то: погрешности, излишняя обрезка страницы со стороны ОБД Мемориала или, наоборот, недообрезка. В таком случае округляем результат. На наших примерах т.е. с 294.333, 286 или 302.6, в результате округления получаем 300.

4. (Обязательно для Windows) Создаем список изображений.

К сожалению, утилита img2pdf не очень дружит с ОС Windows, а именно она не может просто так взять и сконвертировать все картинки из папки. Если вы используете Windows, то, чтобы обойти эту проблему, придется создать список картинок для конвертации в PDF, с полными путями на картинки, идущими через пробел.

+ Создаем список картинок

Описанный ниже способ ясно не единственный, но однозначно "рабочий"

4.1 Открываем командную строку. В ОС Windows можно открыть так: Жмем Win+R, потом вводим в появившиеся окно "cmd".
4.2 Переходим в нужную папку. Нужная папка у нас - папка с изображениями. Для перехода вводим команду cd. Итого у вас должно получится что-то вроде

cd ваша_папка_с_изображениями

например,

cd D:\obd\doc1

4.3 Вводим

dir /B /ON > list.txt

4.4 Теперь в папке с изображениями появится текстовый файл list.txt . Вырезаем его оттуда и переносим в отдельную папку.
4.5 Теперь нам понадобится текстовый редактор с поодержкой esc-последовательностей. Я рекомендую Akelpad. Устанавливаем Akelpad.
4.6 Открываем файл list.txt Akelpad'ом . Далее идем Правка - Замена. Ставим галочку на esc-последовательстях
4.7 Заменяем

\n

на

путь_до_папки_с_изображениями 

Не забудьте пробел в конце! Причем вводя путь до папки, используйте такие слеши "/" вместо "\" (иначе Akelpad будет ругаться). На нашем примере,

D:/obd/doc1

4.8 Отключаем esc-последовательности. Заменяем "/" на "\".
4.9 Почти готово. Но осталась одна маленькая но немаловажная проблема. Смотрим на самый первый путь до файла и видим, что там нет пути до него. Идем в самый низ файла и видим, что в последнем пути до файла нет имени самого файла. Решаем просто - вырезаем последний ненужный путь и вставляем его в начало. Итого - решили 2 проблемки за раз.

Готово.

Пользователи, например, Ubuntu, вместо всего этого могут просто потом обойтись чем-то типа "путь_до_изображений\*.*"

5. Непосредственно сама конвертация.

+ Конвертация

Ну, сначала привычные шаги:
5.1 Открываем командную строку. В ОС Windows можно открыть так: Жмем Win+R, потом вводим в появившиеся окно "cmd".
5.2 (Только для Windows) Переходим в нужную папку. Нужная папка у нас - папка, куда вы установили Python (обычно "C:\Python36" или что-то наподобие) , потом папка Scripts. Для перехода вводим команду cd. Итого у вас должно получится что-то вроде

cd C:\Python36\Scripts

Теперь к делу

5.3 Рекомендуемый шаг. Создадим файл со справкой. Пускай и английской. Вводим.

img2pdf -h > help.txt

Теперь в папке появился файл help.txt, который нам в случае чего поможет в наших начинаниях.

5.4 Конвертируем. Для этого вводим

img2pdf -o *имя_выходного_файла*.pdf -s *горизонтальное_значение_DPI*dpix*вертикальное_значение_DPI*dpi *наш_список картинок*

Поясняю

*имя_выходного_файла* - придумайте сами smile
*горизонтальное_значение_DPI* и *вертикальное_значение_DPI* - то, что мы получали в пункте 3
*наш_список картинок* - то, что мы получали в пункте 4


Ну вот и всё!

Ну и на десерт. Объединяем PDF файлы без потерь.

Не должно пригодится по идее, но на всякий случай. Я думаю, может пригодится, если выяснится, что значения DPI, которые ОБД Мемориал использовал для разных частей документа не совпадают (и тогда придется создавать несколько PDF под разные параметры). Или если вы решили вообще конвертировать изображения иным, чем с помощью img2pdf, способом, и у вас получилось много файлов PDF, которые надо объединить.

+ Объединяем PDF файлы без потерь

1. Скачиваем и устанавливаем PDFsam Basic. Программа поддерживает самые разные платформы. Пожет потребоваться JAVA. Установив, пока программу не открываем.
2. Открываем папку с файлами PDF, которые надо объединить, и удостоверяемся, что они идут в правильном порядке, когда отсортированы по имени и по возрастанию. Если нет, то придется переименовать файлы типа "1.pdf", "2.pdf" и так далее. Если файлов очень много, то можно воспользоваться программой ReNamer
3. Открываем PDFsam Basic. Жмем по опции "Merge" (объединить). Обычно эта опция - самая первая в меню.
4. Выделяем наши файлы для объединения и бросаем их в таблицу программы. Обязательно удостоверяемся, что программа ваши файлы расставила в правильном порядке
5. В поле "Destination file" вводим, куда мы хотим сохранить файл.
6. Ну а теперь по вкусу: можно добавить содержание PDF'а, изменить версию PDF файла, включить или выключить сжатие (сжатие, кстати, там без потерь)
7. Жмем "Run" (маленькая кнопка в самом низу слева

8. Готово!

(Ух, наконец-таки дописал smile )

Share

2

Re: Скачиваем документы из ОБД Мемориал

Есть  также несколько  томов  книг- Книга  памяти  Украины 1999 г издания, их  раздавали по  всем школам  и  библиотекам  по  областям и  районам  - списки  погибших в  ВОВ

Ищу предков по фамилии Зубченко,Погромский,Дзюба,Скидан по Украине, Бахмутский  уезд и по Белоруссии - Дьячковы , Шестопаловы а  также Медлиновы, Фроловы, Спицины, Ломакины
Thanks: litar Л1

Share

3

Re: Скачиваем документы из ОБД Мемориал

В интернете удобней.
Но в КП были те, что не попали в ОБД.

Коли добром ніхто не дасть нам світла, – Його здобути треба – не молить,
Бо без борні нікчемні всі молитви. І свічки мирної не варта та країна,
Що в боротьбі її не запалила.

Share

4

Re: Скачиваем документы из ОБД Мемориал

Ais21260 пише:

Есть  также несколько  томов  книг- Книга  памяти  Украины 1999 г издания, их  раздавали по  всем школам  и  библиотекам  по  областям и  районам  - списки  погибших в  ВОВ

Если хотите - могу попробовать скачать их оттуда (если они там есть) и отправить Вам

Thanks: boda731

Share