LINUX.ORG.RU

Хочу научиться парсить данные

 ,


5

4

Хочу научиться парсить данные из html страниц, из списков и т. п. Например, даже элементарно выдергивать ссылки на mp3 из сохраненной страницы аудиозаписей ВК.

В какую сторону смотреть, какие маны курить, что читать?

Deleted
Ответ на: комментарий от ugoday

Чтоб не задавать идиотских вопросов в стиле: как мне распарсить контекстно-независимую грамматику конечным автоматом?

Ещё один диванный теоретег
Объясни, пожалуйста, разницу между контексто-независимой грамматикой и очень даже конкретной строкой с вполне статичной и известной заранее структурой
Спасибо

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

python, php

Тогда плюсану упомянутый выше lxml, а также beautfilsoup (чуть более высокоуровневый, вроде у новых версий есть lxml-backend), по идее кодировка (=> и parser) обычно не нужна, но тут чтения из выхлопа xsel-а.

Пример про mp3 Хочу научиться парсить данные (комментарий)

# -*- coding: utf-8 -*-

import sys
from lxml import html, etree

parser = etree.HTMLParser(encoding = "utf-8")
tree   = html.parse(sys.stdin, parser)

# debug: если нужно форматирование
options = { "encoding": "utf-8", "pretty_print": True}
sys.stdout.write(html.tostring(tree, **options)) 

print
# debug: если нужно выцепить xpath через grep
for node in tree.iter():
    print tree.getpath(node), node.attrib

link = tree.xpath('//input[starts-with(@id, "audio_info")]/@value')[0]
print "\n", link

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

// ну и вытягивать Моцарта с вконтаклей - вызывает диссонанс)), если это не прикрытие, то лучше попробовать найти на musopen или вытянуть flac c торрентов

anonymous
()
Ответ на: комментарий от zolden

Хочу научиться парсить данные из html страниц

и известной заранее структурой

Конечно, лисперы не очень, но тут вы банально не осилили контекст вопроса.

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

контекст вопроса

У тебя со чтением не очень, да? Не переживай, не всем это дано.
К счастью, моя работа - помогать людям. Так что я тебе помогу с контекстом:
выдергивать ссылки на mp3 из сохраненной страницы аудиозаписей ВК

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

и очень даже конкретной строкой с вполне статичной и известной заранее структурой

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

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

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

С xpath сотоварищи так же все прекрасно перестает работать (реже конечно, не так завязано на контент, но структура тоже меняется). Тут принципиальный вопрос в трудоемкости написания регулярок, а не в теоретической возможности.

anonymous
()
Ответ на: комментарий от ugoday

почём «серебряные пули» нынче? ну, чисто теоретически?

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

К счастью, моя работа - помогать людям.

Коллектор что ли?

У тебя со чтением не очень, да?
Так что я тебе помогу с контекстом: выдергивать ссылки на mp3

Это называется «проекция», попробуй иногда читать что-нибудь кроме толксов. Ох уж эти «помощники людей», придется тебе самому помочь, например, мордочкой ткнуть (икслючительно в профилактических целях):

Например, .. выдергивать ссылки

Решение конкретного примера - частность, в следующий раз поступай проще: из примера входа просто в ответ выдели href и требуй заслуженных почестей.

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

так же все прекрасно перестает работать

Само собой, но простенький xpath вполне сравним по сложности с регуляркой. И более важный момент: он (почти всегда) вернет данные нужного типа (href, id/class элемента, т.д.) или пустое значение, с регулярками приключений потенциально побольше.

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

Ну я же собстна и сказал:

Тут принципиальный вопрос в трудоемкости написания регулярок

А Угадай уперся рогом в маленьких котят.

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

Я о том, что совершенно корректная эквивалентная трансформация в стиле было

 
<p>some text</p>
стало
<p>
some text
</p>


наглухо выбивает все костыли из-под регулярных велосипедов.

Впрочем, пионеры не боятся трудностей.
ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Воу-воу. Все давно уже поняли, что за ужасы тебе снятся.

Зачастую это не страшно. А мелкий одноразовый скриптик без зависимостей — это прекрасно.

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

Это называется «проекция»

ох уж эти архитекторы ынтерпрайз солюшенов
У человека УЖЕ есть сохранённая страничка и структуру он УЖЕ пощупал.
Ему не нужен результат завтра, с использованием модного фреймоворка, ему надо выдернуть пару песен сейчас, потому что завтра ему надоест с этим играться и он займётся чем-нибудь более полезным/интересным
хватит заученную мантру со stackoverflow нести про то что HTML непригоден для разбора регулярками, здесь и сейчас, на локалхосте это рабочий вариант.
А у себя в ынтерпрайзе на АЭС хоть на джаве пиши, пусть босс тебя в очередной раз похвалит за знание модных паттернов

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

ох уж эти архитекторы ынтерпрайз солюшенов

А это где я так отрекомендовался? // Если что «проекция» был употреблен как термин из психологии.

У человека УЖЕ есть сохранённая страничка и структуру он УЖЕ пощупал... ему надо выдернуть пару песен сейчас

У него есть _пример_, а нужно _научиться парсить_. Регулярка нормально решит конкретное первое, но плохо второе. Либо ты довольно ограничен, либо пытаешься выкрутиться.

А у себя в ынтерпрайзе на АЭС хоть на джаве пиши

Давай я тебе объясню как это работает: приводишь крайний случай (который очень маловероятен), меняется «мастшаб», на этом фоне твой костыль меньше заметен. Из разряда «одолеть в споре вымешленного оппонента».

хватит заученную мантру со stackoverflow нести про то что HTML непригоден

А можно цитатку где это я писал? А то духе предыдущего параграфа.

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

без зависимостей — это прекрасно.

Это про скрипты, генерируемые autoconf-ом?). А то есть вопросы: sed - гнутый или или posix или любой? awk - аналогично, sh - bash или posix sh? Или про linux, тогда как же альтернативные люд^W^Wмодераторы?

realpath есть? (сейчас пишу из системы, где нет)

В небольшую защиту зависимостей для xpath могу добавить, что часто есть xmllint, а у него --xpath - некоторые случаи покроет.

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

У него есть _пример_, а нужно _научиться парсить_. Регулярка нормально решит конкретное первое, но плохо второе.

Отнюдь. Разбор страницы это сильно меньшая часть из всей задачи. И на первых порах позволит абстрагироваться от лишних деталей. К тому же знание регекспов не будет лишним в дальнейшем.

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

Если что «проекция» был употреблен как термин из психологии.

Ежу понятно, что речь про психологию, циркуля и отвеса я у тебя ведь не вижу.
Вот и подумай, почему ты проецируешь свои мечты об идеальной архитектуре/дизайне на сугубо прикладную задачу решающуюся в лоб за минуту. Через полгода вконтакте поменяет что-то и однострочник изменится на один-два символа.
Твоя претензия на серебряную пулю - точно такой же крайний случай, мой лишь ближе к реальной ситуации.
Ссылку на stackoverflow погрепай сам, местные архитекторы любят на неё передернуть, поэтому раз в 1-2 месяца она тут всплывает в темах про HTML и регулярки

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

А то есть вопросы: sed - гнутый или или posix или любой? awk - аналогично, sh - bash или posix sh? Или про linux, тогда как же альтернативные люд^W^Wмодераторы?

Все гораздо проще. python есть везде, где нужно будет запускать одноразовый скрипт.

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

То есть если бы, например, lxml была в батарейках, сей аргумент re > xpath был недействительным?

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

Разбор страницы это сильно меньшая часть из всей задачи.

Если подразумевается «query», то согласен.

К тому же знание регекспов не будет лишним в дальнейшем.

Конечно. Но вопрос, оценка по 10-бальной шкале пользы от regexp и xpath для «парсить данные из html»?

anonymous
()
Ответ на: комментарий от zolden

сугубо прикладную задачу решающуюся в лоб за минуту. Через полгода вконтакте поменяет что-то и однострочник изменится на один-два символа.

Последовательное применение такого подхода приводит к постороению стройной системы костылей и подпорок, в которой постоянно что-то ломается, падает и отваливается.

ugoday ★★★★★
()

как-то так кажется

tidy test.html | grep -o 'http://[[:print:]]*.mp3' > listmp3s
Sonsee
()
Ответ на: комментарий от anonymous

То есть если бы, например, lxml была в батарейках, сей аргумент re > xpath был недействительным?

Для меня да. xpath гораздо приятнее регулярок, тут даже спорить не о чем.

anonymous
()
Ответ на: комментарий от zolden

Вот и подумай, почему ты проецируешь свои мечты

Не-а.. в оригинальном смысле это когда человек, испытывающий негативную реакцию, приписывает эту рекцию кому-то другому.

решающуюся в лоб за минуту

На xmlstarlet и ruby -r nokogiri -e '..' решается почти за столько же.

Твоя претензия на серебряную пулю

Зачем «усиливать» мою позицию до абсурда? xpath - по длине как регулярка => вставляй куда хочешь (хоть в упомянутые два, хоть в lxml, хоть в hxt, хоть в online xpath-extractor).

на один-два символа.

Неправда, у меня был скрипт на bash + sed, который выдирал из imagehost-еров прямые ссылки, когда ломалось приходилось фактически заново писать.

Ссылку на stackoverflow погрепай сам

Ссылку же не просил, просил привести, где я на нее ссылался: > хватит заученную мантру со stackoverflow нести.

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

Но вопрос, оценка по 10-бальной шкале пользы от regexp и xpath для «парсить данные из html»?

Да. 2 и 10. Но топик имеет конкретный контекст, в этом и проблема.

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

Но топик имеет конкретный контекст, в этом и проблема.

Как _пример_, а не _конкретная_ задача, с целью _научиться_, а а не чтобы сейчас линк вытащить. Pазница же есть?

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

Pазница же есть?

Учеба практикой самая эффективная. И особенно на данном этапе важно решать задачи с как можно меньшим привлечением лишних сущностей.

Это все равно что для обучению интегрированию освоить курс ТФКП и брать их вычетами.

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

Не-а.. в оригинальном смысле это когда человек, испытывающий негативную реакцию, приписывает эту рекцию кому-то другому.

Проекция - это приписывание другому любых собственных свойств: позитивных и негативных эмоций, мыслей, желаний, обязательств, грандиозности и ничтожности. Бывает, что провоцируется вполне себе позитивный порыв вроде сексуального. То есть, это любая

И бывает даже так, что проецирующий не атакует носителя проекции, а содействует удовлетворению спроецированного желания. Но это уже ближе к проективной идентификации.

В вашем споре ничью сторону не занимаю. Что нужно ТС - ему лучше знать. По моему мнению, grep'ать, sed'ить и awk'ать строки поначалу эффективнее. Так можно освоить перечисленные инструменты, регулярки, а заодно - wget и curl с их опциями, включая авторизацию и подсовывание кук.

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

То есть, это любая

Хорошо, попробую запомнить, в данном случае это непринципиально). Хотя странно, это же попытка ужиться с каким-то диссонансом (в широком смысле слова), ожидать на фоне негативной реации намного естественнее.

anonymous
()
Ответ на: комментарий от zolden

<предположим>На моей винде нет ни grep / ни sed / ни awk

На моей винде нет ни grep

То есть ты будешь нормально принимать реальность, когда тебя будут ставить на место люди, освоившие что-то помимо совсем уж базовых никсовых средств? Просто пока предпосылок не видно.

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

Хорошо, попробую запомнить, в данном случае это непринципиально).

Фишка в том, что любой психический процесс, затрагивающий сознание, может использоваться как защитный. Соответственно, нет препятствий описывать нормальные психические явления в терминах, которыми изначально нарекли защиты. Именно такой подход я видел у Нэнси Мак-Вильямс в замечательной книге «Психоаналитическая диагностика».

Насколько это продуктивно в психологии, сказать не могу: с существующим кругозором не нахожу приложений. Есть интересные результаты в рамках психиатрического литературоведения, если только исследователь осознает ограничения метода. А то некоторые заигрываются, проецируя собственные ассоциации во внешний мир. Должны быть любопытные выводы в философии сознания.

Хотя странно, это же попытка ужиться с каким-то диссонансом (в широком смысле слова), ожидать на фоне негативной реации намного естественнее.

Если говорить о проекции исключительно как о защите, то всё верно.

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

мордочкой ткнуть
ставить на место
ставить на место
ставить на место

Оу, вот это бомбануло, ты жив там, приятель?
Если да, то я тебе как мозговед мозговеду говорю: «у меня для тебя плохие новости». Такие комплексы вылазят боком в конце концов, начинай работать над собой не откладывая.
Что касаемо темы: тебе уже популярно объяснили, что нет в природе серебряных пуль, инструмент надо выбирать под каждую задачу.
Ты это почти понял, забыв только об одном-нельзя научиться бегать, не научившись сначала ходить.

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