Тема этой записи – парсер сайта MirSovetov.ru написанный на PHP. Его исходный код выложен ниже. А пока – предыстория:
Я начинал свой путь к монетизации сайтов с клепания СДЛов на базе копи-паста и продаже ссылок через SAPE (в простонародии – сапа). Дизайн, не долго думая, я брал из паблика и переделывал под свои нужны. Контент получал через собственноручно написанный парсер сайта MirSovetov.ru. Таким образом у меня получилось около пяти сайтов – на каждом по 2-3 раздела с мирсоветов. Часть из этих сайтов прожили пару месяцев до введения АГСа и успешно канули в лету – сначало в поиске осталось по паре страниц, потом наступил бан. Остальные сайты провиселе в индекса по три месяца и ушли сразу же в бан после введения АГС-30. По какой причине часть сайтов прожила дольше мне так и не понятно, при том что дизайн и количество ссылок в сапе было совершенно одинаково.
В гугле эти сайты до сих пор живы и посещалка на них колеблется от 10 до 40 человек в день. Когда-нибудь у меня дойдут руки оптимизировать их под низкочастотники и зарабатывать на тизерах и AdSense.
Вернемся к главному – парсеру. Так как дальнейшее развитие моих сайтов с контентом от МирСоветов пока не предвидется я решил явить миру главную часть этих сайтов – парсер контента. Движок для отображения сайтов также самописный, но его я пока публиковать не буду. Покажу лишь главные функции для работы с контентом.
Итак, код парсера:
set_time_limit(0);
ob_start();
if (!file_exists('content')) mkdir ('content');
$list=getIndex();
$slist=array();
foreach ($list as $l){
if ($_GET['rewrite']==1 || !file_exists('content/'.md5($l['img'].' ').'.htm')){
file_put_contents('content/'.md5($l['img'].' ').'.jpg',file_get_contents($l['img']));
file_put_contents('content/'.md5($l['img'].' ').'.htm',getPageContent($l['href']));
file_put_contents('content/ann_'.md5($l['img'].' '),$l['ann']);
}
$slist[$l['cat']][md5($l['img'].' ')]=$l['text'];
}
file_put_contents('content/index',serialize($slist));
echo 'End.';
ob_end_flush();
function url_get_contents($url){
$url=parse_url($url);
$header= "GET ".$url['path'].'?'.$url['query']." HTTP/1.0".chr(13).chr(10).
"Referer: ".$url['host'].$url['path'].chr(13).chr(10).
"Host: ".$url['host'].chr(13).chr(10).
"Accept: */*".chr(13).chr(10).
"Connection: closed".chr(13).chr(10).
"User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)".chr(13).chr(10).chr(13).chr(10);
$ret='';
if($OpenSocket=fsockopen($url['host'],80,$string,$body,5)){
fputs($OpenSocket,$header);
while(!feof($OpenSocket)){
$temp=fgets($OpenSocket);
$ret.=$temp;
}
fclose($OpenSocket);
}
if (strstr($ret,'302 Object moved')){
preg_match('/Location: ([^\n\r\t]*)/',$ret,$matches);
if (strstr($matches[1],$url['host'])) return url_get_contents($matches[1]);
else return url_get_contents('http://'.$url['host'].$matches[1]);
}
return $ret;
}
function getIndex(){
echo 'Получаем список статей из раздела "Здоровье"...';
flush();
ob_flush();
$lines=url_get_contents('http://mirsovetov.ru/a/medicine/index-all.html');
preg_match_all('|
(.*) // (.*)
\')
(.*)
|sU',$lines,$matches);
$left=array();
for ($i=0;$i
(.*) // (.*)
\')
(.*)
|sU',$lines,$matches);
for ($i=0;$i]*>|iU','',$lines);
$lines=preg_replace('||iU','',$lines);
$lines=preg_replace('|МирСоветов|i','"О здоровье"',$lines);
preg_match('|
(.*)
|sU',$lines,$h1);
$h1=$h1[1];
preg_match('|
[^<]*(.*)[^<]*
|sU',$lines,$matches);
preg_match_all('|'.$h1.'
'.$text;
}
function prpl($m){
return '
Пометка для PHP-программистов – код я писал довольно давно, в нем куча ляпов и недочетов, эти моменты просьба не комментировать 
Спарсенный контент складывается в директорию content, картинки копируются туда же. Также в этой директории создается файл индекса статей.
Вывод меню:
$list=unserialize(file_get_contents('content/index'));
foreach ($list as $cat=>$lf){
echo '
- '.$cat.'
';
}
?>
Вывод контента:
$list=unserialize(file_get_contents('content/index'));
foreach ($list as $cat=>$lf){
foreach ($lf as $img=>$text){
echo '
'.$text.' // '.
$cat.'

'.str_replace('','',preg_replace('||sU','',preg_replace('|МирСоветов|i','"Мы"',file_get_contents('content/ann_'.$img)))).'
';
}
}
В коде есть замена текста «МирСоветов» на «Мы» – копирайтеры сайта-донора контента любят в текст упоминание о себе вставлять
На сегодня всё. Надеюсь, кому-то этот парсер пригодится. Читайте меня по RSS – будет еще много интересного.
Похожие посты:
2 комментариев
Оставить комментарий

Ругается на
|sU’,$lines,$matches);
Parse error: syntax error, unexpected ‘,’ in C:\бла-бла-сервер\index.php on line 32
что не правильно делаю? Там всё верно в коде?
Если всё норм, то как пользоваться правильно. Я видимо что-то не так делаю.
Андрей, посмотрите 32 и предыдущие строки в редакторе с подсветкой синтаксиса – где-то проблемы с кавычками.