xidel, крохотный парсер HTML, XML, JSON

Преамбула

Понадобилось тут быстро и качественно выдрать из HTMLки ссылки и картинки.

Наткнулся на довольно интересный инструмент. Называется xidel, и умеет вытаскивать данные не только из HTML, но также из XML, CSS, JSON, в общем штука получается довольно универсальная. Еще один плюс — кросплатформенность. На сайте есть готовые бинарники под Windows, Linux, пакет для Debian. Все вышеперечисленное, что очень приятно, есть в версиях, как для x86, так и для x64. Также имеются версии для Android ARM и Mac OS 10.8. Открыт и исходный код. Утилита, что хорошо, маленькая, самая большая версия для Android — 2Мб, остальные еще меньше.

Брать исходный файл программа может, как из сохраненной на диск страницы, так и непосредственно с сайта.

Примеры использования

На самом деле, инструкция там довольно большая, покажу только самые простые вещи.

Выдираем все адреса ссылок с главной страницы:

xidel -s --extract "//a/@href" "http://tolik-punkoff.com"

Выдираем адреса изображений:

xidel -s --extract "//img/@src" "http://tolik-punkoff.com"

То же самое с сохраненной предварительно на диск страницей:

wget -P "/tmp" --default-page="test.html" --header="Content-type: text/html" "http://tolik-punkoff.com"

xidel -s --extract "//a/@href" "/tmp/test.html"

wget -P "/tmp" --default-page="test.html" --header="Content-type: text/html" "http://tolik-punkoff.com"

xidel -s --extract "//img/@src" "/tmp/test.html"

Результат


Скачать

На официальном сайте
Мой пакет для Slackware

NodeJS для Slackware 14.2

Ох и запарился я ее собирать… Не, собралась автоматом, просто долго. А готовые пакеты у них на сайте почему-то только под Linux x64. Поэтому, чтоб не пролюбить пакеты:

node-v10.16.1-i486.txz

node-v12.7.0-i486-1.txz

На всякий случай еще и исходники сохраню.

node-v12.7.0.tar.gz

Смешно, из-за нее не так давно умудрился уронить 12 слакварь, точнее Absolute Linux, который был на ней основан, вертелся-крутился года три и никого не трогал, так и перешел на 14-ую.

Использование переменных из bash-скрипта в sed

Преамбула

Вроде невелика проблема, а вопросы вызывает. Понятно, что вот так работать не будет:

VAR1="Nado naiti"
VAR2="Nado zamenit'"

sed 's/$VAR1/$VAR2'

т.к. одинарные кавычки в команде sed все закэранируют, и sed будет искать черти что и с боку бантик.

Решение

1. Поменять одинарные кавычки на двойные.
2. Поменять sed’овский разделитель слэш (/) на что-нибудь другое, например на знак % (Уникальность программы sed в том, что она позволяет использовать любой разделитель, например знак подчеркивания)

VAR1="Nado naiti"
VAR2="Nado zamenit'"

sed "s%$VAR1%$VAR2"

Примеры

Добавление строки в начало файла из предыдущей заметки. Строка содержится в переменной $FIRSTSTRING:

sed -i -e "1 s%^%$FIRSTSTRING\n%" file.txt

Замена строки, начинающейся с любого количества пробелов и/или со строки из переменной $START на строку, содержащуюся в переменной $REPLACE:

sed -i "s%^ *$START.*%$REPLACE%" file.txt