Собираем данные с XLS, XLSX и CSV файлов

Сегодня в платформу 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, кладет их в пул и затем начинает работу основная логика парсера по сбору данных о товарах. Или, представьте, что у вас есть таблица с данными, которые надо дополнить с веба, вы читаете парсером таблицу, проходите строку за строкой и формируете новый датасет, попутно заходя на страницы, скажем, товаров и дополняя данные о товаре. В результирующем датасете у вас будут данные из таблицы и со страницы товара, сведенные в единую запись. Если и другие варианты использования таблиц, но об этом в следующий раз.

Михаил Сисин: Со-основатель облачного сервиса по сбору информации и парсингу сайтов Diggernaut. Работает в области сбора и анализа данных, а также разработки систем искусственного интеллекта и машинного обучения  более десяти лет.
Related Post

This website uses cookies.