Получаю содержимое страницы в виде массива: file1.php PHP: <?php ini_set('display_errors',1); error_reporting(E_ALL); $str=file('http://en.wikipedia.org/wiki/ABBA'); print_r($str); ?> file2.php Хочу получить то что находится между 186 и 187 а именно текст: => ABBA was a Swedish pop music group formed in Stockholm in 1972, consisting of Anni-Frid "Frida" Lyngstad, Björn Ulvaeus, Benny Andersson and Agnetha Fältskog. They became one of the most commercially successful acts in the history of popular music, topping the charts worldwide from 1972 to 1982. PHP: <?php ini_set('display_errors',1); error_reporting(E_ALL); $str=file_get_contents('http://мойсайт/file1.php'); $poisk='/\[186\](.+)\[187\]/si'; preg_match($poisk,$str,$new); print_r($new); ?> Но массив приходит пустой. Что не так ? Локали?? не правильная решулярка Возможно нужно применять сокеты ?? Или выставить как-то больше временни на обработку скрипта ?? Помогите не понимаю... Задача то простая.
В переменной $str - массив, а не строка Можешь написать: PHP: <?php ini_set('display_errors', 1); error_reporting(E_ALL); $str = file('http://en.wikipedia.org/wiki/ABBA'); echo($str[186]); ?>
Спасибо sobachnik Дружище !! Продолажя тему детского парсера ))): PHP: <?php ini_set('display_errors', 1); error_reporting(E_ALL); $str = file('http://en.wikipedia.org/wiki/ABBA'); $new=strip_tags($str[186]); $newtext = wordwrap($new, 50, "<br />\n"); echo $newtext; ?>
И завтра, когда на википедии сменят баннер или добавят какой-нибудь тэг, пункт меню или ещё какую плюшку - вы будете переписывать свой детский парсер. А потом снова. И снова.
В данном случае я сразу занесу данные в базу MySql т.е. парсинг будет не в реальном времени а копирайтом. Просто с помощью этой штуки проще создавать свои страницы.
Copy&Paste через обычный блокнот гораздо легче, чем писать скрипт, проверять с какой строчки по какую нужно собрать HTML, чистить его и т.д.
Не скажи ... естественно я усложню скритп. вот например мысль дальше PHP: <?php ini_set('display_errors', 1); error_reporting(E_ALL); $str = file('http://en.wikipedia.org/wiki/ABBA'); $new=strip_tags($str[186]); $newtext = wordwrap($new, 50, "<br />\n"); echo $newtext; $new2=strip_tags($str[187]); $new3=preg_replace('/\[\d{1,4}\]/siU',"",$new2); echo '<br><br><br>'; echo $new3; echo '<br>'; echo $str[188]; ?> также сами массвы $str[] я сделаю в виде $_POST типа: $str[S_POST] где скрипту буду просто передавать индексы нужного текста с проверками if который сам и соберет конечную страничку. Мои действия: вбить в формы только индексы массивов соот-во предварительно оценив нужный текст, что выбрать
Все выше написано - понятно! А что делать, если для парсинга даных нам нужно сначала залогинится на сайте?
Нашол вот такую документацию по CURL (http://www.php.ru/manual/ref.curl.html), но ничего интересного для себя не взял! Можно ли поподробнее написать (как для чайника)?
vah-smile нужно как бы сэмулировать браузер - т.е. возможность работать с куками. отослать логин/пароль для авторизации методом POST, получить куки с айди сессии, и затем в дальнейших запросах устанавливать в куки этот айди. что-то типа такого. точнее сказать не смогу
Вот нашел инфу по установки CURL на Denwer: http://parsing-and-i.blogspot.com/2009/09/curl-denwer.html На сайте http://www.phpclub.ru/detail/article/curl#part_5 есть пример использования CURL + авторизация, но почемуто аутентыфикация не происходит (или происходит, но я не понимаю как)! PHP: <?php // HTTP authentication $url = "http://www.example.com/protected/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); $result = curl_exec($ch); curl_close($ch); echo $result; ?>
Нет! Я собираюсь парсить совсем другой сайт! example.com - был приведен в качестве примера на http://www.phpclub.ru/detail/article/curl#part_5