Главная arrow Администрирование arrow FreeBSD, Linux, ... arrow Парсим HTML (bash) Saturday, December 16 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

Парсим HTML (bash) Версия для печати
Написал AJEV   
09.02.2010
Лень - двигатель прогресса.

Увлекся я как-то книгами одного автора. 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 '/>Автор</,/<!-- \/ message -->/p'|sed -e :a -e 's/<[^>]*>//g;/</N;//ba'|grep -v "^[[:space:],\t]*$">>/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 '/>Автор</,/<!-- \/ message -->/p') Выбираем кусочки, от слова ">Автор<" до конца сообщения  "<!-- \/ message -->".

5. (sed -e :a -e 's/<[^>]*>//g;/</N;//ba') убираем html теги, что-бы получить чистый текст.

6. (grep -v "^[[:space:],\t]*$") убираем пустые строки.

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

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

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

Последнее обновление ( 09.02.2010 )
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017