Найти тему

Web Scraping: всероссийская перепись 1917

Оглавление

Всероссийская сельскохозяйственная и поземельная перепись 1917 г. по Пензенской губернии

Объем - 317286 записей, это 3173 страницы по 100 записей. Страница представляет собой таблицу из 100 строк с несколькими колонками: "Номер", "ФИО+губерния+волость+село", "Фонд-опись-дело" и др.

Для скачивания списка используем консоль браузера и Javascript.

Disclaimer:

Загружаться будут данные, являющиеся общедоступными, поскольку они не требуют регистрации (предоставляются по гостевому входу).

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

Очистка localStorage

localStorage.clear();

Принудительная очистка localStorage. Первоначально в этом нет необходимости. Но иногда приходится операции повторять или начинать заново (не поваляешь - не поешь). Вот в таких случаях очистка полезна.

Сохранение страницы в localStorage

function f() {
d = document.getElementsByClassName('grid-view new-grid-view themecatalog second-grid')[0].getElementsByTagName('tr');
d1 = [...d].map(t => [...t.cells].map(z => z.textContent.trim()).slice(0, 3)).slice(1, 101);
for (var i = 0; i < d1.length; i++) {
d1i = d1[i];
localStorage.setItem(Number(d1i[0]), d1i[1] + '_' + d1i[2]);
}
btn = document.getElementsByName('ctl00$MainPlaceHolder$_pagingControl$_bForward')[0];
btn.click();
}

Здесь d - массив строк таблицы, d1 - его нормализация (удаление концевых пробелов, всех колонок, кроме первых трех, строки заголовков). Далее в цикле по строкам записываем в localStorage в качестве ключа - номер строки, в качестве значения - колонки "ФИО+губерния+волость+село", "Фонд-опись-дело", объединенные символом "нижнее подчеркивание" (он понадобится в дальнейшем для разделения этих колонок).

Последним действием вызываем обновление страницы - имитацией нажатия кнопки "Далее".

Загрузка нескольких страниц

timerId = setInterval(f, 20000);
setTimeout(() => { clearInterval(timerId); console.log('stop'); }, 20000*400);

Первая строка устанавливает таймер и запускает процедуру f каждые 20 секунд (время установлено таким большим, чтобы дать возможность серверу обновить страницу).
Вторая строка устанавливает максимальное число запусков (в данном случае - число загружаемых страниц равно 400).

Загрузить сразу за раз все 3173 страницы не получится - переполняется буфер localStorage.

Остановка загрузки

clearInterval(timerId);

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

Сохранение localStorage на локальный диск

t = document.createElement('table'); t.style.border = "4px solid red";
document.body.insertBefore( t, document.body.firstChild );
for(var i=0;i<localStorage.length; i++) {
var key = localStorage.key( i );
var item = localStorage.getItem( key ) ;
r = t.insertRow(0); r.style.border="1px solid green";
c = r.insertCell(0);
c.innerHTML = key;
c = r.insertCell(1);
c.innerHTML = item;
}

На текущую страницу сверху добавляется таблица - секция <table>..</table>, в которую построчно записывается содержимое localStorage - сохраненные перед этим страницы интересующего нас списка.

Затем останется только скопировать текст этой таблицы (Ctrl+A, Ctrl+C) в текстовый редактор.

Фото-репортаж о загрузке

Загрузка 400 страниц

-2

Содержимое localSstorage

-3

Загрузка из localStorage в html

-4

Отмечаем для копирования в текстовый редактор (Ctrl+A, Ctrl+C)

-5

Вставляем в текстовый редактор и нормализуем номера записей.

У пятизначного спереди добавляем 0

-6
-7

Между номером и фамилией ставим разделитель - нижнее подчеркивание.

-8

Сортируем записи по возрастанию номера

-9

Импортируем в Эксель

-10

В качестве разделителя колонок указываем нижнее подчеркивание

-11

Импортированный список

-12

В нем есть ошибки. В колонке "Уезд" оказались две неправильные записи

-13

Вот они

-14

Исправляем их в редакторе (добавляя в нужных местах разделитель колонок - нижнее подчеркивание)

-15

Обновляем импорт в Экселе. Теперь колонка "Уезд" нормализована.

-16

Аналогично проверяем и нормализуем следующие колонки: "Волость", "Село" и "Фонд-опись-дело".

Успешного серфинга.

Подписаться на канал Математика и программирование
Вокруг ЕГЭ: разложить x^5+1 на множители с вещественными коэффициентами
Web Scraping: преобразовать иерархическую структуру в табличную
Web Scraping: преобразовать табличную структуру в иерархическую
Web Scraping: всероссийская перепись 1917
Как я поженил Лагранжа и сигмоиду
Интерполяция функций и правило Лопиталя

Подписаться на канал Новости из царской России
VisualStudioCode. html. Урок 1
Вокруг ЕГЭ: разложить x^5+1 на множители с вещественными коэффициентами
Web Scraping: преобразовать иерархическую структуру в табличную
Web Scraping: преобразовать табличную структуру в иерархическую
Web Scraping: всероссийская перепись 1917
Как я поженил Лагранжа и сигмоиду

Оглавление статей канала "Новости из царской России"

YouTube "Новости из царской России"

Обсудить в групповом чате

News from ancient Russia

Персональная история русскоязычного мира