Даниил Подрабинек (grohman) wrote in ru_shell,
Даниил Подрабинек
grohman
ru_shell

Парсинг веб-страницы

Мне понадобилось слить к себе в оффлайн сайт, чтобы в этом самом жутком оффлайне я мог бы его читать. А поскольку читать я люблю со смартфона, нужно было почистить скачанные файлы от всяких html и прочих штуковин. За основу я взял парсер с php.net, немного подправленный за некоторое время использования.


#!/usr/bin/php
<?

$filename=$argv[1];


$search = array ("'<script[^>]*?>.*?</script>'si",
"'<[\/\!]*?[^<>]*?>'si",
"'([\r\n])[\s]+'",
"'&(quot|#34);'i",
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&laquo;'i",
"'&raquo;'i",
"'&mdash;'i",
"'&ndash;'i",
"'&hellip;'i",
"'&uuml;'i",
"'&ldquo;'i",
"'&rdquo;'i",
"'&Agrave;'i",
"'&agrave;'i",
"'&auml;'i",
"'&oacute;'i"

);

$replace = array ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"\"",
"\"",
"-",
"-",
"...",
"u",
"\"",
"\"",
"A",
"a",
"a",
"о"
);

$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
echo preg_replace($search, $replace, $contents);
fclose($handle);


?>


Этот код можно сохранить в файле /usr/sbin/htmlparse.php. Не забудьте сделать ему chmod +x

Теперь как этим пользоваться.
Предположим, скачали сайт командой wget -r http://domain.ru
После скачивания всех файлов делаем следующее:
find domain.ru/ -type d -exec sh -c "mkdir -p parsed/'{}'" \;
find domain.ru/ -type f -exec sh -c "htmlparse.php '{}'> parsed/'{}'" \;


Ну вот, все лежит в директории parsed и теперь это можно читать без всякой лишней фигни. Пока все, может еще чего допишу позже.
Tags: find, parse, php
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

  • 5 comments