Challenger 0 Опубликовано: 1 мая 2007 Рассказать Опубликовано: 1 мая 2007 нед, просто ищу добрую душу , которая подскажет где взять норамльный граббер. Цитата Ссылка на сообщение Поделиться на других сайтах
brusniak 0 Опубликовано: 1 мая 2007 Рассказать Опубликовано: 1 мая 2007 Лучшим для всех будет найти автора для новостей Цитата Ссылка на сообщение Поделиться на других сайтах
Challenger 0 Опубликовано: 2 мая 2007 Рассказать Опубликовано: 2 мая 2007 автора есть, просто слишком большйо сайт и многовасто разделов.... ну че жмотится, та ведь поидеи простой скрипт я пока пшп доконца не осилил - нет времени учеба итд итп а скрипт нужен щас. Принцип я понимаю там сначала получаем страничку сайта, потом выискиваем нужные блоки между совпадающими кусками кода, затем забиваем вс это в массив, вытягиваем из него в иерархическом порядке инфу для размещения в новой новости, затем обновляем это все дело и пихаем в бд... Я не просто бездумно стнул бы ща скрипт если бы дали, я долго занимался этим вопросом, но реально щас нет времени на изучение пшп, помогите епть... Цитата Ссылка на сообщение Поделиться на других сайтах
dataman 0 Опубликовано: 2 мая 2007 Рассказать Опубликовано: 2 мая 2007 Challenger, Тшательное изучение применения библиотеки curl тебе должно помочь. В изучение пшп, помогите епть... А что это такое - вот читай..PHP имеет несколько функций для извлечения Web-содержимого. Эти функции были включены в PHP с самого начала, но администраторы не всегда активировали их. Извлекать файлы из Web могут следующие функции: file_get_contents(). Эта функция проста в использовании и поддерживает как GET-запросы, так и POST-запросы. При помощи file_get_contents() вы получаете весь Web-файл сразу в виде строки. fopen(). Этот метод читает Web-файл кусками. file(). Этот метод читает Web-файл полностью и разделяет содержимое файла по строкам. Он занимает как бы промежуточное положение между file_get_contents() и fopen(). fsockopen(). Эта функция имеет наибольший шанс активизации на Web-сервере. Основным отличием ее от других функций является то, что с fsockopen() вы должны создать весь Web-запрос самостоятельно вместо установки различных параметров. CURL. Библиотека Client URL Library (CURL) обладает самой богатой функциональностью. Используя CURL, вы можете подключаться и взаимодействовать со многими различными типами серверов по протоколам различных типов. CURL в настоящее время поддерживает HTTP, HTTPS, FTP, Gopher, Telnet, DICT, File и LDAP. Она также поддерживает прокси, куки и аутентификацию. К сожалению, CURL часто запрещается компаниями, предлагающими Web-хостинг. Цитата Ссылка на сообщение Поделиться на других сайтах
WMDrakon 20 Опубликовано: 2 мая 2007 Рассказать Опубликовано: 2 мая 2007 пользуйтесь великим RSS!!! Цитата Ссылка на сообщение Поделиться на других сайтах
Niks 0 Опубликовано: 2 мая 2007 Рассказать Опубликовано: 2 мая 2007 Убейте себя апстену, автограбберы. Вы пустое место без мозга. да Вы что? а если у меня два проэкта и отдельный блок на одном из них, который выводит новости с первого, таким образом рекламируя первый проэкт, тоже убиться? Цитата Ссылка на сообщение Поделиться на других сайтах
eRED 0 Опубликовано: 2 мая 2007 Рассказать Опубликовано: 2 мая 2007 а если у меня два проэкта только если есть неодолимое желание это сделать не утрируйте Цитата Ссылка на сообщение Поделиться на других сайтах
Niks 0 Опубликовано: 2 мая 2007 Рассказать Опубликовано: 2 мая 2007 да ладно где б автомат-парсер достать%)) чтоб даже кнопку не нажимать =) Цитата Ссылка на сообщение Поделиться на других сайтах
dataman 0 Опубликовано: 3 мая 2007 Рассказать Опубликовано: 3 мая 2007 (изменено) Niks, Писать самому ... Иди - если джва проекта - твои - то и базы тоже ж твои .. Ну и делай запросы из одного в другой ... Изменено 3 мая 2007 пользователем dataman Цитата Ссылка на сообщение Поделиться на других сайтах
Challenger 0 Опубликовано: 4 мая 2007 Рассказать Опубликовано: 4 мая 2007 ПАРСЕР!!!!!!!!!!! Цитата Ссылка на сообщение Поделиться на других сайтах
Challenger 0 Опубликовано: 8 мая 2007 Рассказать Опубликовано: 8 мая 2007 Решил я таки написать сам, но так как это моя первая работа можете хотябы дать шабик простенькиц скрипт который выискывал бы поторяющиеся теги из контента сайта и грабил бы все чтор между ними (те новость), зап исывал ыв переменную, просто сложновато с нуля , тем более что никогда таткого не делал это ведь форум помощи а не идиотских отмазок, не ужели нет норм людей которые могут хоть чуток помочь? Цитата Ссылка на сообщение Поделиться на других сайтах
almanack 0 Опубликовано: 8 мая 2007 Рассказать Опубликовано: 8 мая 2007 Нормальный граббер и на халяву Цитата Ссылка на сообщение Поделиться на других сайтах
dataman 0 Опубликовано: 10 мая 2007 Рассказать Опубликовано: 10 мая 2007 Challenger, Ну разжалабил ... Я за основу своего грабера курсов валют месных 10 банков брал <? $addr = "http://www.rbc.ru/index.html"; // адрес страницы $begblock1 = "USD ЦБ РФ"; $begblock2 = "EUR ЦБ РФ"; // идентификатор начала блока $begin = "<FONT SIZE=\"-2\">"; // фрагмент HTML-кода до полезных данных $end = "</FONT>"; // фрагмент HTML-кода после полезных данных $result = array(); // массив строк результата $screen = file($addr); $i = 0; while ($i < sizeof($screen) && strpos($screen[$i], $begblock1) == false) {$i++;} $temp = explode($begin, $screen[$i + 2]); $temp = explode($end, $temp[1]); $kursdollar = $temp[0]; $i = 0; while ($i < sizeof($screen) && strpos($screen[$i], $begblock2) == false) {$i++;} $temp = explode($begin, $screen[$i + 2]); $temp = explode($end, $temp[1]); $kurseuro = $temp[0]; echo "Доллар - <B>$kursdollar</B>; Евро - <B>$kurseuro</B>"; ?> Если тебе для обучения - то , ИМХО - в самый раз . Без наворотов, вставляй своё, создавай цыклы, условия - структура новостей же не меняется и в путь ... Цитата Ссылка на сообщение Поделиться на других сайтах
Challenger 0 Опубликовано: 14 мая 2007 Рассказать Опубликовано: 14 мая 2007 написал с горем пополам какото кривой свой граббер, подскажите есть вобщем 3 элемента блока: 1. Дата 2.Текст новости 4. Заголовок новости $date, $text, $title - как эти переменные засунуть в соответсвующие таблицы бд , что и куда, а то сам чета не смог в таблахх разобраться, подскажите сразу запросами как что и куда... Цитата Ссылка на сообщение Поделиться на других сайтах
dataman 0 Опубликовано: 14 мая 2007 Рассказать Опубликовано: 14 мая 2007 Ну, если ты действительно , как пишеш сам чета не смог в таблахх разобраться, то опубликуй свой творение прям тут . Здесь и сейчас. Аффтарство тваё наверно ниукрадём. улыбнулась нумерация и последовательность 1. Дата 2.Текст новости 4. Заголовок новости Цитата Ссылка на сообщение Поделиться на других сайтах
Challenger 0 Опубликовано: 14 мая 2007 Рассказать Опубликовано: 14 мая 2007 гы да там и красть нечего ща допишу и выыложу.. Вот собсна говоря где остановился <?php $url ="http://www.3dnews.ru/news/"; $content =@file_get_contents($url); $pattern ="/<h1 class=\"title_news\">([\s\S]+)<hr color=\"#cfcfcf\" size=1/>"; preg_match_all( $pattern, $content , $res ); foreach( @$res[1] as $val ) { preg_match( "/^([0-9]{2}\.[0-9]{2}\.[0-9]{4})/", $val, $date ); preg_match( "/^([0-9]{2}\.[0-9]{2}\.[0-9]{4}([\s\S]+)$/", $val, $text ); } ?> Проверьте плз правильность ( соответсна это граббер с сайта http://www.3dnews.ru/ из раздела http://www.3dnews.ru/news/) и подскажите что нада еще туды доисать дабы вывести на сайт( ну есь добавить содержимое массива в бд) Так же хотелось бы узнать как находить картинки в блоке, копироватьих себе на сервер и менять ссылку, затемм наверно придется еще и обновить блок, и еще таой вопрос, может это реализовать все классами будет проще? Цитата Ссылка на сообщение Поделиться на других сайтах
dataman 0 Опубликовано: 14 мая 2007 Рассказать Опубликовано: 14 мая 2007 (изменено) А .. Понятно .. Как в старом анегдоте. Чукча не хочет быть читателем. Чукча хочет быть писателем... Коль скоро учиться Вы не хотите - запаситесь неким к-вом виртуального презренного метала и Го го го в форум .. Двумя строчками ниже этого .. Эх.. Ну ладно . Все мы когдато ничё не умели . И ктото нам помогал .. Добрый я сёння.. <?php $url = "http://www.3dnews.ru/news/"; // Тут напишите любую ссылку $msg_error = array ('Урлу праверь.','Иль картинкоф нет или инету кирдыГ.'); // Проверяем - правильнось куда иддём function IsvalidateLink($value) { return (eregi('^(http://)(.*)', $value)) ? 1 : 0; } // А скака тама имаджей function countimage($url) { global $msg_error; // Пихаем % Изменено 14 мая 2007 пользователем dataman Цитата Ссылка на сообщение Поделиться на других сайтах
dataman 0 Опубликовано: 14 мая 2007 Рассказать Опубликовано: 14 мая 2007 Блин .. Чудесный форум проявил непонятное нежелание ознакомит тебя с моими (конечно не совсем моими изысками.) <? $url = "http://www.3dnews.ru/news/"; // Тут напишите любую ссылку $msg_error = array ('Урлу праверь.','Иль картинкоф нет или инету кирдыГ.'); // Проверяем - правильнось куда иддём function IsvalidateLink($value) { return (eregi('^(http://)(.*)', $value)) ? 1 : 0; } // А скака тама имаджей function countimage($url) { global $msg_error; // Пихаем сюда $MyContent = ""; // Вид ссылки - энто главное if (!IsvalidateLink($url)) return $msg_error[0]; $contents = @file_get_contents($url); preg_match_all("|<img[^src]+[^>]+>|is", $contents, $MyContent , PREG_PATTERN_ORDER); // Ради чего всё это и замышлялось for($i = 0; $i < count($MyContent[0]); $i++) { echo $MyContent[0][$i]."<br />"; } // Ашипко . if (empty($MyContent[0][0])) return $msg_error[1]; return count($MyContent[0]); } echo 'Итого сграбили '. countimage($url).' картиночеГ'; ?> Цитата Ссылка на сообщение Поделиться на других сайтах
Challenger 0 Опубликовано: 14 мая 2007 Рассказать Опубликовано: 14 мая 2007 епрст шото решил переписать спомощью классов напишемс и учтем замечания Цитата Ссылка на сообщение Поделиться на других сайтах
dataman 0 Опубликовано: 14 мая 2007 Рассказать Опубликовано: 14 мая 2007 Не забуддь потом, как всё нарисуеш отписаться .. А то и предложить уважаемой публике плоды рук своих И не тока своих . Цитата Ссылка на сообщение Поделиться на других сайтах
Challenger 0 Опубликовано: 22 мая 2007 Рассказать Опубликовано: 22 мая 2007 (изменено) вот первый кусок моего парсера: Код <?php //ввод переменных $url="http://10.10.65.3/2007/05/02/windows_vista_russian_pack.html"; $reg_get_all_url="/^(ftp|http):\/\/((.+?):?\/)+(.+)$/"; $reg_get_extension="/\.([a-zA-Z]+)$/i"; $reg_get_block="/<td\sclass=\Snews\S\svalign=\Stop\S\scolspan=\S2\S>(.+?)<\/tr>/"; $reg_get_title=""; $reg_get_date=""; $extension_pic=@file_get_contents('pictures_ext.txt'); $extension_files=@file_get_contents('files_ext.txt'); $reg_get_images="/(.+?)\.([$extension_pic]+)$/i"; $reg_get_files="/(.+?)\.([$extension_files]+)$/i"; //получаем сщнтент $content=file_get_contents($url); //получаем новость из контента preg_match_all($reg_get_block, $content , $block ); //обрабатываем блок новости foreach( $block[1] as $val ) { //вытаскиваем все ссылки с файлами из блока новости preg_match_all('$reg_get_all_url', $val, $url_files_upload); //вытаскиваем все ссылки на картинки из полученных файловых ссылок preg_match_all('$reg_get_images',$url_files_upload, $picture_url ); //вытаскиваем все ссылки на другие файлы из полученных файловых ссылок preg_match_all('$reg_get_files',$url_files_upload, $files_url ); } echo 'Ссылки на закачку файлов: '.$files_url .'Ссылки на закачку картинок: ' .$picture_url; echo 'Текст новости: ' .$block[1]; ?> ++ Содаржание файла files_ext.txt: Код RAR|ZIP|UHA|EXE +++ Содержание файла pictures_ext.txt: Код BMP|GIF|JPEG|PNG но дело в то что он либо не получает данные со страницы, либо я тут шото с кодом намутилsmile.gif может кто-нить поправит? На данном этапе было важно, получает ли он текст, и нормально ли работает выделение ссылок, как видно не нормально, не могу сам понять в чем дело. Можно взять любую страничку и попытаться выделить из нее похожие куски, ну придется рег.выр-е поменять соответственно! ЗЫ: С вопросом на опережение! : Кто знает структуру базы дынных и таблов, которые работают с новостью, отпишите плз что и куда , куда идет дата, название и все прочее что касаемо новости, дабы иметировать добавление новости из админки нашим скриптом если не сложно, можно канеша и сразу в коммандах, обращениях к бд, переменные можно взять произвольные... Изменено 22 мая 2007 пользователем Challenger Цитата Ссылка на сообщение Поделиться на других сайтах
Challenger 0 Опубликовано: 22 мая 2007 Рассказать Опубликовано: 22 мая 2007 вобщем если никто не поддрживает, может закрыть тему? а то смотрю никаму не интересно? или я не прав? Цитата Ссылка на сообщение Поделиться на других сайтах
Константин 0 Опубликовано: 22 мая 2007 Рассказать Опубликовано: 22 мая 2007 Мне лично интерестно, так как человек на чёмто завязался и желает своё творение показать. Но вот с такими граберами я как то не сталкивался, вернее они мне не нужны были. Но Форум познавательный, можно многому учится. Цитата Ссылка на сообщение Поделиться на других сайтах
dataman 0 Опубликовано: 22 мая 2007 Рассказать Опубликовано: 22 мая 2007 (изменено) Challenger, А оно хоть как то у Вас работает ? Весьма сомневаюсь. Еще раз повторяю... Прежде чем начинать писать, всёж следует учиться читать .. Вы используете функцию $content=file_get_contents($url); Однако, в мануале по пхп ясно же написано о её применении.. string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] ) Пожалуйста, постарайтесь вызвать применяемую Вами функцию со всеми необходимыми параметрами. Возможно и получится чтото .. Или используйте уже @file_get_contents($url); И потом.. Что там за бред с обработкой цикла ? Два ваших массива в переменной $block пусты Перед их обработкой . Но всё равно непонятно , почему Вы обрабатываете только 1 элемент $block[1] Может всёже правельней было бы использовать как это принято for($i = 0;... ? Применение Вами foreach( $block[1] as $val ) заставило быть пацталом. Ниасилил в общем ... И ещё .... Переменная $reg_get_block на момент исполнения равна "/<td\\sclass=\\Snews\\S\\svalign=\\Stop\\S\\scolspan=\\S2\\S>(.+?)<\\/tr>/" Уверен , что это правильно ? Изменено 22 мая 2007 пользователем dataman Цитата Ссылка на сообщение Поделиться на других сайтах
Challenger 0 Опубликовано: 23 мая 2007 Рассказать Опубликовано: 23 мая 2007 (изменено) нет, /<TD\sclass=\"ntitle\">([\s\S]+)<TD\sclass=\"news\"\svAlign=\"top\"\scolSpan=\"2\">[\s\S]+<DIV\sclass=\"hr_line\"><\/DIV><\/TD>/i вот это правильно! подскажи как обрабатывать цыклы поподробнее! плз, мне нада ывтянуть сначало все ссылки из полученного блока, затем отобрать ссылки на каринки и ссылки на файлы отдельно и затем вывести их на экран.... вот поправил с учетом твоих замечаний: <?php //ввод переменных $url="http://10.10.65.3/2007/05/02/windows_vista_russian_pack.html"; $reg_get_all_url="/^(ftp|http):\/\/((.+?):?\/)+(.+)$/"; $reg_get_extension="/\.([a-zA-Z]+)$/i"; $reg_get_block="/<TD\sclass=\"ntitle\">([\s\S]+)<TD\sclass=\"news\"\svAlign=\"top\"\scolSpan=\"2\">[\s\S]+<DIV\sclass=\"hr_line\"><\/DIV><\/TD>/i"; $reg_get_title=""; $reg_get_date=""; $extension_pic=file_get_contents('pictures_ext.txt'); $extension_files=file_get_contents('files_ext.txt'); $reg_get_files="/(.+?)\.([$extension_files]+)$/i"; $reg_get_images="/(.+?)\.([$extension_pic]+)$/i"; //писание возможных ошибок // =======================Ошибки======================= $msg_error = array ( 'Внимание! Выполнение скрипта вызвало ошибку: Указанный вами URL-адресс указан неверно, либо не сущесвует..', 'Внимание! Выполнение скрипта вызвало ошибку: Список соответствий пуст. Возможно, соответсвий не найдено. Проверьте так же, есть ли связь с указанным адрессом.'); //===================================================== //проверяем правильность ссылки function IsvalidateLink($value) { return (eregi('^(http://)(.*)', $value)) ? 1 : 0; } if (!IsvalidateLink($url)) return $msg_error[0]; //получаем контент $content=@file_get_contents($url); //получаем новость из контента preg_match_all($reg_get_block, $content , $block, PREG_SET_ORDER ); //проверяем, есть ли что то в блоке if (empty($block[0][0])) return $msg_error[1]; //обрабатываем блок новости for ($i=0; $i< count($block[0]); $i++) { //вытаскиваем все ссылки с файлами из блока новости preg_match_all('$reg_get_all_url', $block[0][$i], $url_files_upload, PREG_SET_ORDER); //вытаскиваем все ссылки на картинки из полученных файловых ссылок for ($i=0; $g< count($url_files_upload[0]); $g++) { preg_match_all('$reg_get_images',$url_files_upload[i], $picture_url, PREG_SET_ORDER ); //вытаскиваем все ссылки на другие файлы из полученных файловых ссылок preg_match_all('$reg_get_files',$url_files_upload[$i], $files_url, PREG_SET_ORDER ); echo 'Ссылки на закачку файлов:' .'<br />'; print_r($files_url); echo 'Ссылки на закачку картинок:' .'<br />'; print_r($picture_url); } echo 'Ссылки на закачку(все):' .'<br />'; print_r($url_files_upload); } echo 'Текст новости:' .'<br />'; print_r($block[0][$i]); ?> но все равно не прально да еще и ошибку выдает : Warning: preg_match_all() [function.preg-match-all]: No ending delimiter '$' found in D:\MyServer\www\TESTING\Grabber.php on line 20 Ссылки на закачку(все): Fatal error: Maximum execution time of 30 seconds exceeded in D:\MyServer\www\TESTING\Grabber.php on line 33 Изменено 23 мая 2007 пользователем Challenger Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.