Разбор HTML-страницы с помощью Bash

Я пытаюсь написать скрипт Bash, который будет извлекать информацию из HTML-страницы (используя wget). Я знаю, что моя информация будет между тегами <h*>, но есть ли хороший способ получить их?

Чтобы быть более точным, давайте приведем пример:

< h1> header1 & л; / h1>
< h2> header2 & л; / h2>
< h2> otherHeader2 & л; / h2>
< h1> lastHeader1 & л; / h1>
< h2> lastHeader2 & л; / h2>

Я хотел бы извлечь "otherHeader2", a.k.a. второй (но может быть где угодно) заголовок после header1.

1
задан 6 October 2012 в 03:22

2 ответа

Это простой скрипт на python, который проанализирует ваш html, поместит все значения в список и распечатает его. Вы можете либо написать оставшуюся часть скрипта на python, либо вызвать этот скрипт из python, либо вставить этот короткий код как фрагмент кода в bash. Посмотрите примеры ниже.

test.html

< h1>header1< /h1>
< h2>header2< /h2>
< h2>otherHeader2< /h2>
< h1>lastHeader1< /h1>
< h2>lastHeader2< /h2>

parse_header.py

#!/usr/bin/env python
import sys, re
print re.findall(r'< h\d>(.*)< /h\d>', sys.stdin.read())

Сценарий можно вызвать из bash ]

cat test.html | parse_header.py

код Python может быть помещен в скрипт bash

cat test.html | python -c "import sys, re;print re.findall(r'< h\d>(.*)< /h\d>', sys.stdin.read())"

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

0
ответ дан 6 October 2012 в 03:22

Вы никогда не должны анализировать HTML с регулярными выражениями. Всегда используйте правильный анализатор HTML или XML. Например, используя xmlstarlet :

$ xmlstarlet sel -t -v '//h2[2]' html.html 
otherHeader2
0
ответ дан 6 October 2012 в 03:22

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

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