Парсим HTML (bash) Печать
Добавил(а) AJEV   

Лень - двигатель прогресса.

Увлекся я как-то книгами одного автора. http://www.rudasov.ru/

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

Итак начнем.

Система: Ubuntu

Интерпретатор: bash

Сайт: http://www.rudasov.ru 


Скрипт:

#!/bin/bash
echo "">/home/ajev/html/rudazov;
i=1;

topik="1782";

until [[ $i -ge "15" ]]
do
echo $i;
url="http://www.rudasov.ru/talk/showthread.php?t=$topik&page=$i";
wget $url -O rud.html&&cat rud.html|iconv -f cp1251 -t utf8>rud.txt&&cat /home/ajev/html/rud.txt|sed -n '/>Автор/p'|sed -e :a -e 's/<[^>]*>//g;/>/home/ajev/html/rudazov
let "i=i+1";
done 


1.(url="http://www.rudasov.ru/talk/showthread.php?t=$topik&page=$i";) - ну тут все должно быть понятно, урл на нужную тему форума.

2. (wget $url -O rud.html) - выкачиваем страничку и сохраняем. Тут и далее все делается большей частью через текстовые файлы (преднамеренно излишне для отладки) хотя можно все упростить и пользовать только конвееры.

3. (iconv -f cp1251 -t utf8>rud.txt) кодировка для анализа нужна utf8.

4. (sed -n '/>Автор/p') Выбираем кусочки, от слова ">Автор<" --="" message="">".

5. (sed -e :a -e 's/<[^>]*>//g;/
6. (grep -v "^[[:space:],\t]*$") убираем пустые строки.

7. (/home/ajev/html/rudazov) результирующий файл.

8. (topik="1782";) номер топика.

9. (until [[ $i -ge "15" ]]) 15 - это количество страниц в топике плюс единица. Если страниц 14 ставим 15.