Настройка парсера

Настройка парсера

Содержание:

Преобразование HTML

gsqlcmd позволяет извлекать данные из таблиц HTML.

Вы можете извлечь данные требуемой таблицы, используя опцию /rootPath.

Например, вы можете загрузить дивиденды с веб-сайта nasdaq.com:

gsqlcmd download http://www.nasdaq.com/symbol/aapl/dividend-history aapl.htm

Затем получить доступные таблицы с помощью команды:

gsqlcmd show-html-tables aapl.htm tables.htm /openOutput

Полученный файл table.htm содержит примерно такие данные:

Пример режима show-html-tables для дивидендов c nasdaq.com

Можно видеть, что дивиденды находятся в таблице 3.

Соответственно, используйте команду для преобразования загруженного файла, подобную этой:

gsqlcmd convert aapl.htm dividends.csv /rootPath=3 /quoteChar=

или вот так, чтобы извлечь данные непосредственно с веб-страницы:

gsqlcmd convert http://www.nasdaq.com/symbol/aapl/dividend-history dividends.csv /rootPath=3 /quoteChar=

Полученный файл дивидендов.csv будет содержать примерно следующие данные:

ExEffDate;Type;CashAmount;DeclarationDate;RecordDate;PaymentDate
2019-02-08;Cash;0.73;2019-01-29;2019-02-11;2019-02-14
2018-11-08;Cash;0.73;2018-11-01;2018-11-12;2018-11-15
2018-08-10;Cash;0.73;2018-07-31;2018-08-13;2018-08-16
2018-05-11;Cash;0.73;2018-05-01;2018-05-14;2018-05-17
2018-02-09;Cash;0.63;2018-02-01;2018-02-12;2018-02-15

gsqlcmd в большинстве случаев определяет правильную таблицу автоматически.

Т.е., вначале стоит попробовать более простую команду с автоматическим определением:

gsqlcmd convert aapl.htm dividends.csv

Если страница содержит сразу несколько таблиц с нужными данными, примените режим convert для каждой таблицы.

Если таблицы имеют одинаковую структуру, укажите несколько индексов таблиц в опции /rootPath через запятую, например /rootPath=20,21,22.

Если таблица не содержит заголовков, используйте опцию /noSourceHeaders. В этом случае gsqlcmd добавит столбцы с именами типа F1, F2 и т.д.

Преобразование XML

gsqlcmd позволяет извлекать табличные данные из иерархических файлов XML.

В большинстве случаев gsqlcmd автоматически определяет нужные данные.

Однако вы можете использовать опцию /rootPath и другие параметры парсера для настройки.

Например, test.xml имеет следующее содержимое:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <parent>
        <row id="1"><f1>data11</f1><f2>data12</f2></row>
        <row id="2"><f1>data21</f1><f2>data22</f2></row>
        <row id="3"><f1>data31</f1><f2>data32</f2></row>
    </parent>
</root>

Базовая команда convert выглядит следующим образом:

gsqlcmd convert test.xml test.csv

Полученный файл test.csv будет иметь следующее содержимое:

id;"f1";"f2"
1;"data11";"data12"
2;"data21";"data22"
3;"data31";"data32"

gsqlcmd выбирает "лучший" корень данных.

Эта команда эквивалентна следующей:

gsqlcmd convert test.xml test.csv /rootPath=root.parent.row

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

Например:

gsqlcmd convert test.xml test.csv /rootPath=root.parent

Результат будет следующий:

row_id;"row_f1";"row_f2"
1;"data11";"data12"
2;"data21";"data22"
3;"data31";"data32"

Вы можете использовать опцию /quoteChar для удаления кавычек.

Например:

gsqlcmd convert test.xml test.csv /rootPath=root.parent /quoteChar=

row_id;row_f1;row_f2
1;data11;data12
2;data21;data22
3;data31;data32

Используйте режим show-roots для отображения корневых узлов.

Например:

gsqlcmd show-roots test.xml

root
root.parent
root.parent.row
root.parent.row.id
root.parent.row.f1
root.parent.row.f2

Посмотрите также на следующие параметры, которые позволяют настроить парсер:

/attributedColumns=<col>.<attr>[;...]
/collapsedNodes=<node>[;...]
/ignoredTags=<tag>[;...]
/keptNodes=<node>[;...]
/requiredColumns=<name>[;...]
/skippedNodes=<node>[;...]

Например, вы можете пропустить некоторые узлы, используя опцию /skippedNodes:

gsqlcmd convert test.xml test.csv /quoteChar= /skippedNodes=f2

id;f1
1;data11
2;data21
3;data31

Преобразование JSON

Преобразование JSON аналогично XML, поскольку оба формата имеют иерархическую структуру.

Например, test.json имеет следующее содержимое:

{"root":
  {"parent":[
    {"id":1,"f1":"data11","f2":"data12"},
    {"id":2,"f1":"data21","f2":"data22"},
    {"id":3,"f1":"data31","f2":"data32"}
  ]
}

Базовая команда convert возвращает следующее:

gsqlcmd convert test.json test.csv

Id;"F1";"F2"
1;"data11";"data12"
2;"data21";"data22"
3;"data31";"data32"

Синтаксический анализатор JSON делает первые буквы имен столбцов заглавными.

Используйте режим show-roots для отображения корневых узлов.

Например:

gsqlcmd show-roots test.json

root
root.parent
root.parent.row
root.parent.row.id
root.parent.row.f1
root.parent.row.f2

Вы можете выбрать необходимые данные с помощью опции /rootPath.

Например:

gsqlcmd convert test.json test.csv /rootPath=root /quoteChar=

Parent_id;Parent_f1;Parent_f2
1;data11;data12
2;data21;data22
3;data31;data32

Анализатор JSON поддерживает вывода для нескольких корневых узлов. Например:

gsqlcmd convert test.json test.csv /rootPath=root.parent.f1,root.parent.f2 /quoteChar=

F1;F2
data11;data12
data21;data22
data31;data32

Вы можете использовать * вместо узлов. Например:

gsqlcmd convert test.json test.csv /rootPath=*.*.f1,*.*.f2 /quoteChar=

Вы можете найти множество готовых к использованию примеров в папке Downloading and converting to CSV загруженного пакета gsqlcmd.

Также обратите внимание на следующие опции, которые позволяют настроить парсер:

/keptNodes=<node>[;...]
/requiredColumns=<name>[;...]
/skippedNodes=<node>[;...]

Преобразование плоского текста

gsqlcmd позволяет получать данные из плоских текстовых файлов, если текст позволяет обнаружить столбцы, как например:

id  f1      f2
1   data11  data12
2   data21  data22
3   data31  data32

Используйте команду convert для извлечения данных:

gsqlcmd convert test.txt test.csv

Полученный файл test.csv содержит следующее:

id;"f1";"f2"
1;"data11";"data12"
2;"data21";"data22"
3;"data31";"data32"

Обратите внимание, что вы также можете использовать текстовые драйверы Microsoft ODBC и OLE DB для выбора и преобразования текстовых данных.

На начальном этапе обновите файл schema.ini с помощью команды make-ini:

gsqlcmd make-ini test.txt schema.ini

Затем используйте команду exec для выборки данных:

gsqlcmd exec test.txt "SELECT * FROM test.txt" test.csv

В таких командах можно использовать функции SQL, поддерживаемые драйвером, такие, как WHERE или GROUP.

Преобразование CSV

gsqlcmd позволяет извлекать данные из файлов CSV и преобразовывать их в любой поддерживаемый выходной формат.

Обратите внимание на следующие полезные параметры форматирования:

/add=<header>=<value | function>[;...]
/addRowNum
/dateFormat=<format>
/dateTimeFormat=<format>
/escapeChar=<char>
/noBOM
/outputCodepage=<codepage>
/outputCulture=<name>
/[outputFormat=]asText | asTxt | asCsv | asHtm | asHtml | asXml | asJson
/[[output]Separator](formatting-options.htm#option-outputSeparator)=<separator> | Tab
/quoteChar=<char>
/rowNumBase=<integer>
/timeFormat=<format>

Например, вы можете использовать следующую команду, чтобы добавить новые столбцы, такие как "Symbol" и "Date", и преобразовать выходной файл в кодировку UTF-8.

gsqlcmd convert test.csv test-65001.csv /outputEncoding=65001 /add=Symbol=AAPL;Date=Date()

Обратите внимание, что вы также можете использовать текстовые драйверы Microsoft ODBC и OLE DB для выбора и преобразования данных CSV.

На начальном этапе обновите файл schema.ini с помощью команды make-ini:

gsqlcmd make-ini test.csv schema.ini

Затем используйте команду exec для выборки данных:

gsqlcmd exec test.csv "SELECT 'AAPL' AS Symbol, :date AS [Date], * FROM test.csv" output.csv /set=date=Date()

В таких командах можно использовать функции SQL, поддерживаемые драйвером, такие, как WHERE или GROUP.