На форуме ru-board было высказано мнение, что статьи в разделе написаны общо. Соглашусь, что так и есть. Потому что у каждого своя задача и своя проблема. Тем не менее решил написать еще одну статью об общем подходе к проблеме извлечения нужных данных.

Итак. Как правило надо обрабатывать данные страниц сохраненных из сети интернет. Программа Offline Explorer или старый добрый Teleport обеспечат нам необходимые материалы.

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

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

Поэтому я предлагаю может быть немного больше подумать, потерять время на написании итогового фильтра обработки, но зато не работать ручками, а сразу получить итоговые данные, готовые для ввода в таблицу Excel. То есть берутся исходные данные, извлекаются нужные поля и из них формируем данные для импорта. Вот как то так.

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

На первом шаге можно начинать писать регулярные выражения для каждого необходимого поля. При этом я советую отлаживать их поштучно. Берется одно поле. Для него пишется регулярное выражение. Запускаем прогон F9. Смотрим сколько значений в итоге было извлечено. Если оно совпадает с общим количеством страниц - значит все хорошо. Регулярное выражение работает корректно. Если значений меньше - значит что-то идет не так, надо анализировать код и искать особенности. Вполне возможно, что для корректной работы на этом шаге потребуется предварительная обработка страниц с тем, чтобы привести значения нужного поля к общему виду.

Пример. Описание может иметь вид <P>Описание товара бла-бла-бла</P>.
Или такой
<P>Описание товара
бла-бла-бла</P>.

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

! Лайфхак Иногда в исходном коде используются так называемые мягкие переносы. Они показываются как символ ¬. В некоторых редакторах они даже срабатывают как жесткие перенося текст за ними на следующую строку. Но путать их с обычными переносами не следует. Поэтому, чтобы убрать подобную двусмыслицу, я сразу заменяю мягкий перенос на жесткий. Для этого использую фильтр Replace -> Find pattern (perl style). В поле поиск указываю (.*)¬ в поле замена $1¶. 

Для извлечения данных используем фильтр из группы Extract - Extract Matches. В качестве паттерна пишем регулярное выражение, например, <h1>(.*)</h1>. Прогоняем на тестовых данных, смотрим результат. Если все хорошо, то можно попробовать на реальных данных с выводом в клипборд или отдельный файл, чтобы исходные данные не испортить. Если считать, что на каждой странице используется только один тэг H1 (во всяком случае именно так рекомендуется), то количество извлеченных строк должно совпасть с общим числом страниц. Совпало? Отлично. Переходим к следующему полю. Потом еще к следующему и так далее.

Несколько полей объединяются в фильтре знаком | или и все это имеет вид
<h1>(.*)</h1>|<h2>(.*)</h2>|<h3>(.*)</h3>|<h4>(.*)</h4>.

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

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

Ну и наконец последний Третий шаг. Вывод данных для экспорта в Excel.

Здесь формируется строка с разделителем точка с запятой ; вида поле1; поле2; поле3; .... Один файл дает одну строку. На реальных данных после прогона каждого файла получаем одну строку.

Проверили, посчитали строки. Если все на месте - можно делать окончательный вывод. Если что-то не так - ищем проблемный файл и правим итоговый фильтр на нем.

Для ввода в Excel результат работы нашего фильтра - а это файл в текстовом виде - выбираем закладку Данные, затем Из текста и вставляем наш файл. Указываем в качестве разделителя точку с запятой и куда вставлять.

Вот и все.

! Лайфхак Начиная каждый этап или еще чаще я использую пустой фильтр из группы Special -> Comment и в комментарии записываю, что делаю. Это очень удобно когда спустя время надо что-либо вспомнить!