ValekS (30.06.2013 / 08:21)ну, я сграбить кое-чего сегодня хотела
И тебе тоже напишу Спасибо! Гг
Будешь теперь что-то парсить?
ValekS (30.06.2013 / 08:21)ну, я сграбить кое-чего сегодня хотела
И тебе тоже напишу Спасибо! Гг
Будешь теперь что-то парсить?
Kazzone-1x-net (30.06.2013 / 09:26)Что это вообще за символ - ' ? Где ты его выцепил? Это как я понимаю десятичный код какого то хтмл символа, но какого именно я так и не нашёл. Нету такого. Вот амперсанд - & - обозначается как & хтмл кодом и как & десятичным кодом.
Как можно сделать код рабочим?
$texts = str_replace(''', ''', $text[1]);
MRAMOR (30.06.2013 / 10:18)Ну при парсере хеллтар.ру проще использовать заголовки, так как в них содержится название записи. Зачем ещё куда то лезть?
title это ж заголовки, а как запихнуть если так буде
MRAMOR (30.06.2013 / 10:36)Там как бэ и не трудно. Сразу надо все ссылки на новости вырезать, затем засунуть их в массив и потом уже не ай-ди записей\новостей\статей перебирать а эти ссылки.
да, новости хотел, тогда ждем
ValekS, все не читал, но есть один момент
Название записи у нас содержится в диве - title, в нашем случае это - <div class="title"><b>Catch Box for Windows</b></div>. Но я не буду парсить Название от сюда, так как если внимательно посмотреть, то можно обнаружить что Название статьи содержится ещё в title - <title>Catch Box for Windows</title>, откуда его взять удобнее.
Screamer (30.06.2013 / 11:08)Ну та кто да.
Текст в <title> может обрезаться
Kazzone-1x-net (30.06.2013 / 11:50)Вот этот знак - ' - кавычка - обозначается как ' хтмл кодом и ' десятичным. Хотя может тот ноль, перед 39, и не влияет ни на что. Отображения кавычки десятичным кодом я не встречал.
Это не хеллтар. А этот знак вот -> '
Kazzone-1x-net (30.06.2013 / 11:57)Ну да. Придётся мучиться с постраничкой. Даже пока не знаю как её можно так сказать обойти или что. Подумаю на досуге.
А как быть с джоновской библиотекой? Там статья если длинная, она делиться на страницы?
UA95 (30.06.2013 / 12:21)Ну примерно так я и думал.
Получаешь количесво страниц,запускаешь цикл и текст со всех страниц пишишь в одну переменную.
Да грядет продолжение!
Я снова с вами. Теперь, когда мы написали элементарный парсер записей блога, настало время его усовершенствовать. Чем мы и займёмся сегодня.
Тем кто не читал первую статью - Парсим записи блога, рекомендую её прочитать. Так вам будет понятней вся суть парсинга и код приводимый мной ниже.
Пишем парсер с использованием cURL
Стандартная PHP функция file_get_contents() не очень надёжная: она может не брать исходный код некоторых сайтов, так же может быть отключена на хостинге. Так же file_get_contents() проигрывает функционально. Поэтому мы откажемся от её использования. В место неё мы будем использовать cURL.
Опять же, не хочу объяснять что такое cURL, ведь это можно легко узнать и самому - набрав в гугле. Впрочем если сказать кратко cURL это инструмент работающий с url, позволяющий сымитировать браузер. Очень полезный инструмент кстати.
В общем виде использование библиотеки cURL сводиться к четырем пунктам:
1) Инициализация cURL c помощью функции curl_init.
2) Установка параметров текущему сеансу c помощью функции curl_setopt.
3) Получение кода страницы c помощью функции curl_exec.
$) Закрытие сеанса cURL c помощью функции curl_close.
Итак, сейчас мы будем внедрять cURL в наш код парсера, написанного в прошлой статье. Создадим для начала функцию, в который и будем получать данные сайта:
function get_contents($url) {
return ;
}$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$data = curl_exec($curl);
curl_close($curl);return $data;curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.15');define('_IN_JOHNCMS', 1); // указываем что файл относится к ДжонЦМС
require_once('../incfiles/core.php'); // инклюдим ядро двига
require_once('../incfiles/head.php'); // инклюдим шапку
function get_contents($url) { // функция получения кода сайта
$curl = curl_init(); // стартуем сеанс cURL
curl_setopt($curl, CURLOPT_URL, $url); // указываем параметр - ссылку на страницу
curl_setopt($curl, CURLOPT_HEADER, 0); // указываем параметр - отключение заголовков
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // указываем параметр - взапись кода страницы в переменную
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); // не обязательный параметр - обрываем сеанс если через 30 секунд не достучались до страницы
curl_setopt($curl, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.15'); // не обязательный параметр - устанавливаем юзер-агент
$data = curl_exec($curl); // заносим код страницы в переменную
curl_close($curl); // закрываем сеанс
return $data; // отдаём код страницы
}
function title($var) { // функция получения названия записи
preg_match('/<title>(.*?)<\/title>/is', $var, $title); // вырезаем название записи из титла
$titles = str_replace('"', '"', $title['1']); // обрабатываем кавычки
return $titles; // отдаём название
}
function text($var) { // функция получения текста записи
preg_match('/<div class=\"post\">(.*?)<div style=\"float:left\">/is', $var, $text); // вырезаем текст записи
$texts = preg_replace('/<img(.*?)\/>/si','',$text['1']); // вырезаем из текста картинки
$texts = preg_replace('/<a(.*?)<\/a>/si','',$texts); // вырезаем из текста ссылки
$texts = str_replace('"', '"', $texts); // обрабатываем кавчки
$texts = strip_tags($texts); // вырезаем из текста все хтмл теги
return $texts; // отдаём тест записи
}
for ($i = 1; $i < 178; $i++) { // создаём цикл, 1 - ай-ди первой записи а 178 ай-ди последней увел. на единицу
$file = get_contents('http://helltar.ru/post-'.$i.'.html'); // получаем код страницы с записью
$title = title($file); // получаем название
$text = text($file); // получаем текст
if ($title && $text) { // проверка наличия названия и текста
mysql_query("INSERT INTO `lib` SET
`refid` = '217ssss',
`time` = '" . time() . "',
`type` = 'bk',
`name` = '" . mysql_real_escape_string(mb_substr(trim($title), 0, 100)) . "',
`announce` = '" . mysql_real_escape_string(mb_substr(trim($text), 0, 100)) . "',
`text` = '" . mysql_real_escape_string($text) . "',
`avtor` = 'ValekS',
`ip` = '0',
`soft` = '1',
`moder` = '1'
"); // заносим статью в БД библиотеки
echo 'Пост '.$i.' - Готово!<br/>'; // выводим результат
} else { // если нет названия и текста записи
echo 'Пост '.$i.' - Eror!<br/>'; // выводим ошибку
}
}
require_once('../incfiles/end.php'); // инклюдим ноги