Парсер сниппетов Спутника на PHP
Понадобилось недавно отпарсить Спутник, но под рукой подходящей проги не оказалось, поэтому запилил простейший парсер на php, а потом немного ещё и причесал его для удобства.
Что делает парсер?
- Быстро и эффективно собирает заголовки, сниппеты и URL станиц выдачи поисковика Sputnik.ru по нужному поисковому запросу, причём делать это можно хоть раздельно, хоть в нужной комбинации.
- По умолчанию парсит 1 страницу выдачи (первые 10 позиций), но можно выбрать количество страниц для парсинга (поставил до 10, чтобы не создавать проблем).
- Всё спаршенное легко копируется в буфер для дальнейшей обработки.
Первоначально было желание оформить парсер в виде онлайн-сервиса, но дабы не создавать себе головных проблем, отдаю код в чистом виде. Работает везде, где есть php )), хоть на сервере, хоть на Денвере. Никаких прокси не прикручивал, т.е. в данный момент это не комбайн для парсинга без остановки, а просто удобный инструмент для просмотра выдачи и сбора сниппетов по необходимости для корыстных целей…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | <? header("Content-Type: text/html; charset=utf-8"); ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Парсер Спутника</title> </head> <body> <div style="width:90%; text-align:justify;margin-left:5%;margin-right:5%"> <? echo $string;?> <h1>Онлайн-парсер Спутника</h1> <p>Автор: <a href="//xstroy.com" target="_blank"><span style="color:red">X</span>stroy</a></p> <form method= "POST"> <p>Ключевик: <input type= "text" name= "key" size="50" value placeholder="Ключевая фраза" ></p> <p>Кол-во страниц: <select name="nomer" > <option value=2 >1</option> <option value=3 >2</option> <option value=4 >3</option> <option value=5 >4</option> <option value=6 >5</option> <option value=7 >6</option> <option value=8 >7</option> <option value=9 >8</option> <option value=10 >9</option> <option value=11 >10</option> </select> </p> <input type= "submit" value= "Парсить"> <input type="reset" name="Reset" value="Очистить форму"> <p>Что парсим: <input type="checkbox" name="checkbox1" value="1"> URL-сайта <input type="checkbox" name="checkbox2" value="1"> Заголовок сниппета <input type="checkbox" name="checkbox3" value="1" checked> Текст сниппета</p> <hr size="1"> </form> <? $zz=$_POST['nomer']; $string=$_POST['key']; $checkbox1=$_POST['checkbox1']; $checkbox2=$_POST['checkbox2']; $checkbox3=$_POST['checkbox3']; $zzz=$zz-1; if($zzz>0 and $string){echo '<h3>Выдача по запросу: '.$string.'</h2> <p>Количество страниц для парсинга (по 10 url): '.$zzz.'</p><hr>';} echo '<p><button class="js-textareacutbtn" disable>Копировать в буфер</button><button class="js-textareadeletebtn" disable>Очистить</button></p><textarea class="js-cuttextarea" style="width:100%;height:500px">'; if($string){ $query = urlencode(mb_strtolower($string, 'UTF-8')); $i=""; $nomer=""; $schet=0; for($i=1;$i<$zz;$i++) { $url= "http://www.sputnik.ru/search?q=$query$nomer"; $json = file_get_contents($url); $json=str_replace("<b>","",$json); $json=str_replace("</b>","",$json); preg_match_all( '/(?<=noredir=1\">).*?(?=<\/a><\/div><div\ class=\"b-result-content\">)/is' , $json , $h1 ); preg_match_all( '/(?<=<div\ class=\"b-result-text\">).*?(?=<\/div>)/is' , $json , $snippet ); preg_match_all( '/(?<=<div\ class=\"b-result-title\"><a\ href=").*?(?=\")/is' , $json , $urlik ); for ($x=0; $x<10; $x++) { $schet=$schet+1; if($checkbox1==1){echo $urlik[0][$x]."\n";} if($checkbox2==1){echo $h1[0][$x]."\n";} if($checkbox3==1){echo $snippet[0][$x]."\n";} echo "\n"; } $nomer="&from=".$i."1"; // sleep for 10 seconds sleep(1); }} echo '</textarea>'; ?> <script> var cutTextareaBtn = document.querySelector('.js-textareacutbtn'); cutTextareaBtn.addEventListener('click', function(event) { var cutTextarea = document.querySelector('.js-cuttextarea'); cutTextarea.select(); try { var successful = document.execCommand('copy'); var msg = successful ? 'successful' : 'unsuccessful'; console.log('Cutting text command was ' + msg); } catch(err) { console.log('Oops, unable to cut'); } }); var cutTextareaBtn = document.querySelector('.js-textareadeletebtn'); cutTextareaBtn.addEventListener('click', function(event) { var cutTextarea = document.querySelector('.js-cuttextarea'); cutTextarea.select(); try { var successful = document.execCommand('delete'); var msg = successful ? 'successful' : 'unsuccessful'; console.log('Cutting text command was ' + msg); } catch(err) { console.log('Oops, unable to cut'); } }); </script> </div> </body> </html> |
Установка скрипта проста, как тапок: создаём любой php-файлик и добавляем код. Всё, открываете эту страничку в браузере и пользуетесь халявой. Код парсера открытый, поэтому по сути — это болванка, в которой правкой регулярок можно парсить что угодно.
P.s. Я не програмист, поэтому по рукам меня бить не нужно. Собрал скрипт на коленке для своих нужд , который работает и выполняет необходимые мне функции, а теперь и кому-то из моих читателей может пригодится.
Давно не писал статьи в блог и был неприятно удивлён тем, что когда-то рабочий плагинчик для вставки кода в WP сдох, поэтому пришлось в срочном порядке ставить замену в виде Crayon Syntax Highlighter.
Да, чуть не забыл, смотрим выдачу Гугла в регионах с помощью нового сервиса.
Прям дорген SED ))))
Ай, какой ты прозорливый, получи пирожок! 🙂
Собирался прикрутить его к 1-й версии впседа, ведь там ещё можно было свои парсеры добавлять, а то в новом уже половина парсеров не пашет.
Так и не докрутил, но это чудо запилил, а в качестве пирожка — вот генератор контента на базе этого парсера
Так я не поняла, что можно забирать код?
Глупый вопрос… Если для ссылки, то зря, т.к. они тут не активны.
Всем привет! У меня перестал парсить… Код изменялся?
Привет Наташ, парсер работает. Только что проверил.
Может не работать только по 2 причинам: не запущен локальный сервер (если на нём) или уже словила фильтр по ip от спутника (если был массовый парсинг, хотя меня ещё не фильтровал ни разу).
Спасибо! Честно, не ждала так быстро ответ. ) Парсер мне очень пригодился.