Книги Памяти. Часть 1.

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

В некоторых вопросах, у меня не хватает знаний, поэтому решения не всегда оптимальные, буду рад советам/исправлениям. Ниже, трудозатраты для каждого из этапов указаны на примере Можгинского района (200 страниц, 8000 записей). Итак, основные этапы:

  1. Скачивание данных. Суммарно заняло три дня, утром уходя на работу ставил закачку, вечером приблизительно 1 час уходил на обработку результатов скачивания.
  2. Распознавание скачанных изображений программой FineReader. Самый трудоемкий процесс, потратил на этот этап два выходных, приблизительно 20-25 часов работы.
  3. Нормализация распознанных данных. Приблизительно 3-4 часа.
  4. Сопоставление распознанных и скачанных данных. Приблизительно 3-4 часа.
  5. Финальная сверка и привязка НП. Приблизительно 3-4 часа.

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

Скачивание изображений.

Для массового скачивания, я использовал расширение для Google Chrome - Web Scraper. После установки расширения открываем сайт obd-memorial.ru и нажимаем клавишу F12, справа откроется консоль, для удобства переместим консоль в нижнюю часть браузера.

Выбираем пункт Web Scraper, затем Create new sitemap, затем Import sitemap и загружаем следующий код в поле Sitemap JSON:

{"selectors":[{"parentSelectors":["_root"],"type":"SelectorElement","multiple":false,"id":"Select Image","selector":"img#image","delay":""},

{"parentSelectors":["Select Image"],"type":"SelectorImage","multiple":false,"id":"Image","selector":"_parent_","downloadImage":true,"delay":""}],

"startUrl":"https://www.obd-memorial.ru/html/info.htm?id=404169001&page=[1-533]",

"_id":"obd_image"}

Далее во вкладке Sitemaps выбираем загруженный профиль obd_image, нажимаем Sitemap, далее Edit Metadata и в поле Start URL указываем диапазон ссылок, с которой будем работать. В квадратных скобках указан диапазон номеров страниц для скачивания. Например, если хотим скачать сканы всех страниц первого тома Книги Памяти Удмуртской Республики, необходимо указать:

https://www.obd-memorial.ru/html/info.htm?id=404169001&page=[1-533]

После этого кликаем Sitemap -> Scrape. И ждем, когда скачаются все изображения.

UPD 26.12.2017: После последнего обновления Chrome, потоковое скачивание больше не работает. В результате получается только список ссылок. По этому списку изображения можно скачать используя любой менеджер закачки.

Скачивание данных.

Процедура полностью аналогична скачиванию изображений. Если выставлять скачивание больше 300 страниц одновременно, у меня скрэппер зависал, поэтому при скачивании данных, указывал не более 300 страниц одновременно. Процесс очень длительный, по очереди открываются все ссылки на странице, сбор данных продолжается несколько часов. Код:

{"selectors":[{"parentSelectors":["_root"],"type":"SelectorElement","multiple":false,"id":"Картинка","selector":"img#image","delay":""},

{"parentSelectors":["Картинка"],"type":"SelectorImage","multiple":false,"id":"Картинка образ","selector":"_parent_","downloadImage":false,"delay":""},

{"parentSelectors":["_root"],"type":"SelectorLink","multiple":true,"id":"Ссылки","selector":"area","delay":""},

{"parentSelectors":["Ссылки"],"type":"SelectorElement","multiple":false,"id":"Запись","selector":"div#result_div table.info_table","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Номер записи","selector":"td.id_result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 1","selector":"tr:nth-of-type(4) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 2","selector":"tr:nth-of-type(4) td.result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 3","selector":"tr:nth-of-type(5) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 4","selector":"tr:nth-of-type(5) td.result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 5","selector":"tr:nth-of-type(6) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 6","selector":"tr:nth-of-type(6) td.result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 7","selector":"tr:nth-of-type(7) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 8","selector":"tr:nth-of-type(7) td.result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 9","selector":"tr:nth-of-type(8) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 10","selector":"tr:nth-of-type(8) td.result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 11","selector":"tr:nth-of-type(9) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 12","selector":"tr:nth-of-type(9) td.result","regex":"","delay":""},

{"parentSelectors":["_root"],"type":"SelectorText","multiple":false,"id":"Код страницы","selector":"td.id_result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 13","selector":"tr:nth-of-type(10) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 14","selector":"tr:nth-of-type(10) td.result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 15","selector":"tr:nth-of-type(11) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 16","selector":"tr:nth-of-type(11) td.result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 17","selector":"tr:nth-of-type(12) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 18","selector":"tr:nth-of-type(12) td.result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 19","selector":"tr:nth-of-type(13) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 20","selector":"tr:nth-of-type(13) td.result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 21","selector":"tr:nth-of-type(14) td.title","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 22","selector":"tr:nth-of-type(14) td.result","regex":"","delay":""},

{"parentSelectors":["Запись"],"type":"SelectorText","multiple":false,"id":"Запись 23","selector":"tr:nth-of-type(n+15) td","regex":"","delay":""}],

"startUrl":"https://www.obd-memorial.ru/html/info.htm?id=404169001&page=[1-533]",

"_id":"obd_data"}

После завершения сбора данных, сохраняем их в csv. Затем результат импортируем в Excel.

PS: Список Книг Памяти опубликованных на сайте obd-memorial.ru:

Том Содержание Ссылка Таблица Сканы Комментарий
КО 1 Арбажский, Афанасьевский, Белохолуницкий Ссылка Таблица    
КО 2 Богородский, Верхнекамский, Верхошижемский, Вятскополянский Ссылка     пропущены стр. 65-80
КО 3 Даровский, Зуевский, Кикнурский Ссылка      
КО 4 Кильмезский, Кирово-Чепецкий Ссылка      
КО 5 Куменский, Котельнический Ссылка      
КО 6 Лебяжский, Лузский, Малмыжский, Мурашинский Ссылка      
КО 7 Нагорский, Немский, Нолинский Ссылка      
КО 8 Омутнинский, Опаринский, Оричевский, Орловский Ссылка      
КО 9 Пижанский, Подосиновский, Санчурский Ссылка      
КО 10 Свечинский, Слободской Ссылка      
КО 11 Советский, Сунский, Тужинский Ссылка      
КО 12 Унинский, Уржумский Ссылка      
КО 13 Фаленский, Шабалинский Ссылка      
КО 14 Юрьянский, Яранский, Дополнительные списки Ссылка      
КО 15 Киров Ссылка      
КО 16         нет
КО 17 Дополнительные списки Ссылка      
КО 18 Дополнительные списки Ссылка      
КО 19         нет
КО ФСБ Книга Памяти ФСБ Ссылка     нет
УР 1 Алнашский, Граховский, Кизнерский, Можгинский Ссылка Таблица Сканы  
УР 2 Вавожский, Игринский, Селтинский, Сюмсинский, Увинский Ссылка   Сканы  
УР 3 Воткинский, Дебесский, Завьяловский, Якшур-Бодьинский Ссылка      
УР 4 Глазовский, Красногорский, Юкаменский, Ярский Ссылка      
УР 5 Балезинский, Кезский, Шарканский Ссылка      
УР 6 Камбарский, Каракулинский, Киясовский, Малопургинский, Сарапульский Ссылка     пропущены стр. 369-384
УР 7 Ижевск, Дополнительные списки Ссылка Таблица    
УР 8 Дополнительные списки, Воины умершие в госпиталях на территории Удмуртии Ссылка Таблица   пропущены стр. 23 и 24
УР 9 Дополнительные списки Ссылка Таблица    
РТ 1 Агрызский Ссылка      
РТ 6 Балтасинский Ссылка      
РТ 9 Елабужский Ссылка      
РТ 14 Кукморский Ссылка     пропущены стр. 249-256
РТ 16 Менделеевский Ссылка     пропущены стр. 265-272

Комментарии

Аватар пользователя ru-danko

Виктор, большое спасибо, что делишься опытом!

Аватар пользователя Виктор_В

К сожалению, из-за обновлений Chrome этот метод уже не работает, поэтому пока на паузе.

Аватар пользователя ru-danko

Кировская область, том 2. На ОБД "Мемориал" отсутствуют сканы страниц с 65 по 80 (всего 16 страниц) - Богородский район.

По таким случаям придётся смотреть оригиналы КП в библиотеке. 

Аватар пользователя Виктор_В

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

Аватар пользователя ru-danko

Перепроверил все остальные районы. Подтверждаю пропуски в томе УР-8. Больше пропусков нет.

Аватар пользователя ru-danko

КП УР. Том 6 - пропущены страницы 369-384.

Аватар пользователя ru-danko

КП РТ. Том 14 - пропущены страницы 249-256 (Кукморский район)

Аватар пользователя ru-danko

КП НО. Том 13 - пропущена страница 227 (Шарангский район)

Аватар пользователя ru-danko

КП РТ. Том 16 - пропущены страницы 265-272 - это Мамадышский район - он вроде бы нас не интересует, Менделеевский начинается со стр. 273.

Но там не совсем понятно, т.к. заголовочные страницы Менделеевского района не пронумерованы, может быть наоборот не хватает 267-273 по Менделеевскому району.

Аватар пользователя Виктор_В

Менделеевский район буду делать, проверю.

Аватар пользователя ru-danko

Сканы по всем томам выкачал, вот ссылка: https://drive.google.com/drive/folders/1TOL28xjlJiBB_WmE89eLk3_syv9sT02V...

(кроме 1-го тома по Удмуртии, который уже полностью готов)

Использовал другой метод (написал свою программу). 

Аватар пользователя ru-danko

Догружаю в облако КП ФСБ Кировской области, КП по 5 районам Татарстана и КП Большесосновского района. Выгрузка ещё по 3 томам в процессе.

Аватар пользователя ru-danko

Все сканы загружены: https://drive.google.com/drive/folders/1TOL28xjlJiBB_WmE89eLk3_syv9sT02V

Данные тоже (там же, подпапка _Таблицы)