Список определенного содержания от сайта в терминале

Это было одной из этих 12 проблем на моем практическом экзамене сегодня. Для первой части задачи мы, как предполагалось, перечисляли содержание первой страницы из http://slashdot.org. Я использовал рысь для этого. Затем для второй части нас попросили отфильтровать вывод таким способом только перечислить заголовки (названия статьи) от первой страницы slashdot.org (этот буквально сокрушил меня). Примите во внимание, что это было задачей из 12 на 100-минутном экзамене, таким образом, я считаю, что существует быстрый способ сделать это, но мне не могло удаться найти различимый patteren. Какие-либо идеи о том, как решить это?

0
задан 28 January 2015 в 21:59

2 ответа

grep '<h.*>.*<\/h.>' sample.html | sed -e 's/<[^>]*>//g'

grep 'regex (все теги заголовка)' канал имени файла (" |") sed удаляют все теги HTML

, Это должно работать.

0
ответ дан 3 August 2019 в 17:47

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

первый компонент мог быть curl или wget. Я неравнодушен к wget:

wget-O slashdot.html http://slashdot.org

Затем, взгляд на slashdot.html с текстовым редактором. Вы найдете, что заголовки содержатся в тегах. Таким образом, второй компонент - что-то, что понимает HTML достаточно хорошо, чтобы позволить Вам получить только теги h2. Вы могли сделать это с некоторыми умными регулярными выражениями с помощью grep, awk или sed, но Вы сойдете с ума. Я предпочитаю что-то, что знает HTML немного лучше. Если Вам разрешают установить дополнительные пакеты, добраться libxml2-utils пакет и использовать xmllint. Это может проанализировать HTML (с - переключатель HTML) и понимает xpath нотацию для выбора узла HTML/XML. Объяснение xpath выходит за рамки ответа здесь, и оно сделало бы очень хорошую тему исследования для Вас для узнавания больше, таким образом, я предлагаю, чтобы Вы Google "xpath" поняли, как оно работает.

О единственном дополнительном приеме то, что xmllint распечатает текст от h2 узлов дословно, таким образом, это будет выглядеть ужасным, поскольку они - все в одной строке. Я буду также использовать перенаправление и каналы, чтобы не создавать временные файлы, и отбросить вывод проверки HTML xmllint (slashdot HTML ужасно несовместимо):

wget -q -O - http://slashdot.org | xmllint -html -xpath '//h2/span/a/text()' - 2>/dev/null

Вы заметите, что это показывает заголовкам все в одной строке. Теперь, для разделения их измените его на это (для вставки \n символ как часть текста заголовка, перед закрытием </a>:

wget -q -O - http://slashdot.org | sed 's/<\/a>/\n<\/a>/g' | xmllint -html -xpath '//h2/span/a/text()' - 2>/dev/null
  1. Первый, wget slashdot домашняя страница, производя HTML к стандартному выводу (-O -), и подавляя wget сообщения о ходе выполнения (-q).
  2. Канал это к sed для добавления \n после каждого закрытия </a> тег.
  3. Наконец канал это к xmllint (использование - как входной файл для чтения из stdin) попросите, чтобы он использовал синтаксический анализатор HTML и показал только узлы, соответствующие данному выражению XPath, отбросив любой диагностический вывод (2>/dev/null для отбрасывания стандартной погрешности).
0
ответ дан 3 August 2019 в 17:47

Другие вопросы по тегам:

Похожие вопросы: