Даниил Подрабинек (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 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 5 comments