Страница 2 из 2
Re: Двойной парсинг
Добавлено: 25 дек 2013, 16:50
viboxjuwin
Я пользуюсь таким кодом для парсинга видимой части контента:
[ATTACH]1896[/ATTACH]
Но он не может вытянуть и контент ссылки "ОТВЕТЫ" на сайт..
Re: Двойной парсинг
Добавлено: 25 дек 2013, 17:59
Хыиуду
Сначала берете весь код страницы, находите ссылки вида [страница].ru/questions/q[тут цифры], потом открываете каждую страницу тем же file_get_contents и оттуда уже выдергиваете отдельно вопрос (начинается на <div id="qcontent" class="question-content__small">, кончается на
</div>) и отдельно ответы (начинаются на <p class="answer__text">, кончаются на </p>).
Кстати, если уж вы взялись за парсинг - рекомендую вам освоить регулярные выражения. Сильно упростите себе жизнь, хотя на первых порах может показаться тяжко.
Re: Двойной парсинг
Добавлено: 25 дек 2013, 18:03
viboxjuwin
Спасибо за ответ)
Но мне бы хотелось, чтобы вопросы и ответы автоматически обновлялись на моем сайте..
подскажите, научите. А я уже в обиде не оставлю)
Re: Двойной парсинг
Добавлено: 25 дек 2013, 18:05
viboxjuwin
Я дергаю код со страницы таким образом..
<?php
//откуда будем парсить информацию
$content = iconv("windows-1251", "UTF-8", file_get_contents('http://www.9111.ru/answers/daily/2013_12_24/'));
// Определяем позицию строки, до которой нужно все отрезать
$pos = strpos($content, '<td class="td_q1 my-questions__cells my-questions__cells-left">');
//Отрезаем все, что идет до нужной нам позиции
$content = substr($content, $pos);
// Точно таким же образом находим позицию конечной строки
$pos = strpos($content, '<form action="http://www.9111.ru/questions/add/?utm_s ... rm#f_q_add" method="post">');
// Отрезаем нужное количество символов от нулевого
$content = substr($content, 0, $pos);
//если в тексте встречается текст, который нам не нужен, вырезаем его
$content = str_replace('','', $content);
// выводим спарсенный текст.
echo ($content);
//echo "вставляем сюда завершающий код";
?>
Re: Двойной парсинг
Добавлено: 25 дек 2013, 18:06
viboxjuwin
Я дергаю код со страницы таким образом...
//откуда будем парсить информацию
$content = iconv("windows-1251", "UTF-8", file_get_contents('
http://www.9111.ru/answers/daily/2013_12_24/'));
// Определяем позицию строки, до которой нужно все отрезать
$pos = strpos($content, '<td class="td_q1 my-questions__cells my-questions__cells-left">');
//Отрезаем все, что идет до нужной нам позиции
$content = substr($content, $pos);
// Точно таким же образом находим позицию конечной строки
$pos = strpos($content, '<form action="
http://www.9111.ru/questions/add/?utm_s ... rm#f_q_add" method="post">');
// Отрезаем нужное количество символов от нулевого
$content = substr($content, 0, $pos);
//если в тексте встречается текст, который нам не нужен, вырезаем его
$content = str_replace('','', $content);
// выводим спарсенный текст.
echo ($content);
//echo "вставляем сюда завершающий код";
Re: Двойной парсинг
Добавлено: 25 дек 2013, 18:45
viboxjuwin
Я попробовал проработать ситуацию таким образом:
//откуда будем парсить информацию
$content = iconv("windows-1251", "UTF-8", file_get_contents('http://www.9111.ru/questions/q3121782-i ... redit.html'));
// Определяем позицию строки, до которой нужно все отрезать
$pos = strpos($content, '<div id="qcontent" class="question-content__small">');
//Отрезаем все, что идет до нужной нам позиции
$content = substr($content, $pos);
// Точно таким же образом находим позицию конечной строки
$pos = strpos($content, '
</div>');
// Отрезаем нужное количество символов от нулевого
$content = substr($content, 0, $pos);
//если в тексте встречается текст, который нам не нужен, вырезаем его
$content = str_replace('','', $content);
// выводим спарсенный текст.
echo ($content);
//echo "вставляем сюда завершающий код";
//откуда будем парсить информацию
$content = iconv("windows-1251", "UTF-8", file_get_contents('http://www.9111.ru/questions/q3121782-i ... redit.html'));
// Определяем позицию строки, до которой нужно все отрезать
$pos = strpos($content, '<p class="answer__text">');
//Отрезаем все, что идет до нужной нам позиции
$content = substr($content, $pos);
// Точно таким же образом находим позицию конечной строки
$pos = strpos($content, '</p>');
// Отрезаем нужное количество символов от нулевого
$content = substr($content, 0, $pos);
//если в тексте встречается текст, который нам не нужен, вырезаем его
$content = str_replace('','', $content);
// выводим спарсенный текст.
echo ($content);
//echo "вставляем сюда завершающий код";
Где красным - вопрос, синим - ответ. Все отображается, конечно, на моем сайте. Но как мне автоматизировать обновление этого самого контента?
Как-то уникализировать ссылки? Качать блоком?
Ссылка на тот самый сайт:
http://www.9111.ru/answers/daily/2013_12_24/
Re: Двойной парсинг
Добавлено: 26 дек 2013, 13:02
Хыиуду
Автоматически обновлялись - это тот еще квест. Предложенный мной способ не дает сбоев, но медленный. При каждом обновлении страницы лезть на чужой сайт и там 100500 страниц парсить - это умереть можно (а еще вполне возможно, что там вас просто забанят). Поэтому вы одним скриптом делаете парсинг данных с чужого сайта, а другим этот скрипт запускаете. Например, по крону раз в час. Не думаю, что там собраны такие важно-срочные вопросы, что отставание на час будет играть какую-то роль.
Re: Двойной парсинг
Добавлено: 26 дек 2013, 16:44
viboxjuwin
Можете приложить пример такого скрипта. А я отдам взамен, что попросите..
Re: Двойной парсинг
Добавлено: 30 дек 2013, 11:52
Хыиуду
Да все просто, в вашем коде вместо echo $content поставьте, например, file_put_contents('content.txt', $content), а на странице, куда надо выводить эти вопросы с ответами поставьте echo file_get_contents('content.txt'). Это в случае, если вы контент храните в файле, тогда еще надо поставить права 0666 на этот файл,чтобы PHP мог записывать в него.