LINUX.ORG.RU

Bash парсинг html кода

 ,


0

2

Добрый день! Имеется кусок хтмл кода

<div id="jams_body" style="top: -2880px; "><a class="jams_block" href="http://www.doroga.tv/nnov/cameras/#c/56.32578406,43.95533283/z/15/"><img src="./Пробки на дорогах Нижнего Новгорода, веб-камеры онлайн, карта пробок - DorogaTV_files/staticmap"><div class="title">Мурашкинская улица</div><div class="description">Совнаркомовская улица → Московское шоссе, Должанская улица</div><div class="params">Средняя скорость: <span class="red">9 км/ч</span></div><div class="params">Длина: <span>218 м.</span></div></a><a class="jams_block"></a><a class="jams_block" href="http://www.doroga.tv/nnov/cameras/#c/56.31724238,44.00000535/z/15/"><img src="./Пробки на дорогах Нижнего Новгорода, веб-камеры онлайн, карта пробок - DorogaTV_files/staticmap(1)"><div class="title">улица Звездинка</div><div class="description"></div><div class="params">Средняя скорость: <span class="red">8.7 км/ч</span></div><div class="params">Длина: <span>357 м.</span></div></a>

Есть ли возможность достать только следующие параметры - название улицы, скорость движения и протяженность? Я не силен в регулярных выражениях, буду рад кто сможет помочь!

да, возможность такая есть

поищи в вебдевелопменте тему в которой парсили гуглемаркет, чтоли, по 100500 раз одно и тоже писать лень

shrub ★★★★★
()

>html
>регулярных выражениях

А всё потому что
>bash

Пиши на нормальном языке и таких вопросов не возникнет.

Deleted
()
#!/usr/bin/bash

echo '<div id="jams_body" style="top: -2880px; "><a class="jams_block" href="http://www.doroga.tv/nnov/cameras/#c/56.32578406,43.95533283/z/15/"><img src="./Пробки на дорогах Нижнего Новгорода, веб-камеры онлайн, карта пробок - DorogaTV_files/staticmap"><div class="title">Мурашкинская улица</div><div class="description">Совнаркомовская улица → Московское шоссе, Должанская улица</div><div class="params">Средняя скорость: <span class="red">9 км/ч</span></div><div class="params">Длина: <span>218 м.</span></div></a><a class="jams_block"></a><a class="jams_block" href="http://www.doroga.tv/nnov/cameras/#c/56.31724238,44.00000535/z/15/"><img src="./Пробки на дорогах Нижнего Новгорода, веб-камеры онлайн, карта пробок - DorogaTV_files/staticmap(1)"><div class="title">улица Звездинка</div><div class="description"></div><div class="params">Средняя скорость: <span class="red">8.7 км/ч</span></div><div class="params">Длина: <span>357 м.</span></div></a>' | python -c "from lxml.html import fromstring as f;import sys;print '\\n'.join(x.text_content() for x in f(sys.stdin.read().decode('utf-8')).cssselect('div')[2:5])"
anonymous
()

питон с его lxml отлично подошел. Только он парсит 1 параметр, ну т.е одну улицу, а если их будет к примеру 3 или больше то как быть?

D1abloRUS
() автор топика

1) выдёргивать из html`я можно либо внешним скриптом через dom, либо преобразовав xslt в нужный вид. Остальное - от лукавого :)

2) если всё-таки «от лукавого» : убиваем из фрагмента sed`ом все теги

cat fragment.txt | sed -r 's/([[:space:]]*<[^>]+>[[:space:]]*)+/:/g;s/:+/:/g'
из полученного
:Мурашкинская улица:Совнаркомовская улица → Московское шоссе, Должанская улица:Средняя скорость:9 км/ч:Длина:218 м.:улица Звездинка:Средняя скорость:8.7 км/ч:Длина:357 м.:
можно дёргать данные например awk`ом :) но это костыль

MKuznetsov ★★★★★
()
Ответ на: комментарий от Deleted

Спасибо, сделал через

sed -r 's/<[^<]*>//g'
Появился вопрос как оставить форматирование, там вроде написано, но не особо понял. т.е мне надо получить на выходе:
Совнаркомовская улица → Московское шоссе, Должанская улица
Средняя скорость: 9 км/ч
Длина: 218 м.
и так для всего файла

D1abloRUS
() автор топика
Ответ на: комментарий от MKuznetsov

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

D1abloRUS
() автор топика
Ответ на: комментарий от D1abloRUS

я просто не вижу смысла весь его приводить, потому что те 2 строки которые я написал дальше просто повторяются

и вы умеете корректно их разделять ? и в начале html нет больше ничего, что может сбить предложенный костыль ??

ps. может тривиальный links -dump решает 90% ваших проблем. Просто гляда на приведённый _кусок_ html я лично не могу представить как он отрендериться в текст.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Страница - http://www.doroga.tv/nnov/ Кусок кода который меня интересует начинается с <div id=«hot_jams»> к этому коску можно придти с помощью awk. Там идет хтмл код, 2 строки из этого кода я приводил выше. Мне нужно этот код преобразовть в шаблон Улица:
Скорость движения:
Протяженность:

т.е Совнаркомовская улица → Московское шоссе, Должанская улица
Средняя скорость: 9 км/ч
Длина: 218 м.
и т.д до конца блока <div id=«hot_jams»></div>

D1abloRUS
() автор топика
Ответ на: комментарий от D1abloRUS

а ничё так что этот блок подгружается через ajax ? вы уж тогда возьмите исключительно загружаемую часть, без внешней шелухи

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Загружаемая часть все равно будет в хтмл, по сути это

python -c "from lxml.html import fromstring as f;import sys;print '\\n'.join(x.text_content() for x in f(sys.stdin.read().decode('utf-8')).cssselect('div')[2:5])"
Отлично работает, как раз как надо, но обрабатывает только одну строку, как сделать чтобы обработались все строки?

D1abloRUS
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.