Сегодня в платформу Diggernaut была добавлена поддержка файлов в формате XLS, XLSX и CSV. Схема поддержки реализована в том же формате как и у других поддерживаемых типов файлов. Вы загружаете в диггер файл, используя команду walk, диггер получает файл, определяет его тип и конвертирует его в XML. Далее вы можете ходить по DOM структуре, извлекать нужные данные и формировать свой набор данных.
Рассмотрим на примере, как это работает. Для этого мы поместили 3 файла в нашу песочницу:
https://www.diggernaut.com/sandbox/sample.csv — CSV файл с данными
https://www.diggernaut.com/sandbox/sample.xls — XLS файл с данными (бинарная версия)
https://www.diggernaut.com/sandbox/sample.xlsx — XLSX файл с данными (XML версия)
Напишем очень простую конфигурацию диггера, которая будет забирать файл и в режиме отладки показывать нам исходный код конвертированных данных.
---
config:
debug: 2
agent: Firefox
do:
- walk:
to: https://www.diggernaut.com/sandbox/sample.csv
do:
Если мы запустим диггер в режиме отладки, то в логе мы увидим следующий исходный код XML страницы с данными
First
Last
Pcode
Political Party
Smith
Fred
A
Democratic
Robbins
Terry
1
Green
O'Neill
Susan
B
Republican
Parker
Scott
D
American Independent
Perkins
Ralph
D
American Independent
Talbot
Angie
7
Middle Class Pty
Так как в CSV только один лист, то элемент sheet в результирующей структуре только один. В XLS/XLSX файлах листов может быть много, и все они будут находиться в соответсвующих элементах sheet. Парсить такую структуру достаточно легко, проходим по листам, затем по строкам row и забираем данные из колонок column. Значения в классах соответствуют номеру строк и столбцов в оригинальном файле.
Давайте теперь посмотрим, как будет сконвертирован XLS ресурс:
---
config:
debug: 2
agent: Firefox
do:
- walk:
to: https://www.diggernaut.com/sandbox/sample.xls
do:
Получим следующий исходный код:
First
Last
Pcode
Political Party
Smith
Fred
A
Robbins
Terry
1
O'Neill
Susan
B
Parker
Scott
D
Perkins
Ralph
D
Talbot
Angie
7
PARTY CODE
NAME
1
Green
2
Reform
3
Whig
4
Islamic Political Party of America
5
Rock & Roll
6
Natural Law
7
Middle Class Pty
8
Humanist
9
Pragmatic
10
Conscious American African Party
11
Parliament Party
12
United Conscious Builders of the Dream Party
13
The Egalitarian Party
14
The Humanitarian Party
15
Scientifically Evolving University Party
16
God, Truth & Love Party
17
Superhappy Party
18
Working Families Party
A
Democratic
B
Republican
C
Decline to State
D
American Independent
E
Citizen Party
F
Communist
G
Conservative
H
Environmentalist
I
Ind. Progressive
J
Liberal
K
Peace & Freedom
L
Prohibition
M
New Economy
N
Socialist
O
Socialist Labor
P
Pot Party
Q
Libertarian
R
Amer. Natl. Socialist
S
Poor People’s Party
T
Free
U
National
V
Constitution Party
W
Vision
X
Puritan
Y
Federal
Z
Misc.
Как вы видите, в этом файле мы имеем 2 листа, а в остальном принципиально такую же структуру как и в случае с CSV. Если мы загрузим XLSX, то получим точно такой же результат как и с XLS, поэтому мы опустим этот момент.
Как можно использовать этот функционал, кроме собственно парсинга финальных данных? Как вариант, вы можете использовать таблицы как фид с ресурсами, которые должен забрать ваш парсер. К примеру, вы добавляете список ссылок на товары в магазине в таблицу. Ваш парсер читает таблицу, забирает список URL, кладет их в пул и затем начинает работу основная логика парсера по сбору данных о товарах. Или, представьте, что у вас есть таблица с данными, которые надо дополнить с веба, вы читаете парсером таблицу, проходите строку за строкой и формируете новый датасет, попутно заходя на страницы, скажем, товаров и дополняя данные о товаре. В результирующем датасете у вас будут данные из таблицы и со страницы товара, сведенные в единую запись. Если и другие варианты использования таблиц, но об этом в следующий раз.