Двойной парсинг
-
- Сообщения: 41
- Зарегистрирован: 29 сен 2013, 22:18
Я пользуюсь таким кодом для парсинга видимой части контента:
[ATTACH]1896[/ATTACH]
Но он не может вытянуть и контент ссылки "ОТВЕТЫ" на сайт..
[ATTACH]1896[/ATTACH]
Но он не может вытянуть и контент ссылки "ОТВЕТЫ" на сайт..
- Вложения
-
[Расширение txt было запрещено, вложение больше недоступно.]
Сначала берете весь код страницы, находите ссылки вида [страница].ru/questions/q[тут цифры], потом открываете каждую страницу тем же file_get_contents и оттуда уже выдергиваете отдельно вопрос (начинается на <div id="qcontent" class="question-content__small">, кончается на
</div>) и отдельно ответы (начинаются на <p class="answer__text">, кончаются на </p>).
Кстати, если уж вы взялись за парсинг - рекомендую вам освоить регулярные выражения. Сильно упростите себе жизнь, хотя на первых порах может показаться тяжко.
</div>) и отдельно ответы (начинаются на <p class="answer__text">, кончаются на </p>).
Кстати, если уж вы взялись за парсинг - рекомендую вам освоить регулярные выражения. Сильно упростите себе жизнь, хотя на первых порах может показаться тяжко.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
-
- Сообщения: 41
- Зарегистрирован: 29 сен 2013, 22:18
Спасибо за ответ)
Но мне бы хотелось, чтобы вопросы и ответы автоматически обновлялись на моем сайте..
подскажите, научите. А я уже в обиде не оставлю)
Но мне бы хотелось, чтобы вопросы и ответы автоматически обновлялись на моем сайте..
подскажите, научите. А я уже в обиде не оставлю)
-
- Сообщения: 41
- Зарегистрирован: 29 сен 2013, 22:18
Я дергаю код со страницы таким образом..
<?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 "вставляем сюда завершающий код";
?>
<?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 "вставляем сюда завершающий код";
?>
-
- Сообщения: 41
- Зарегистрирован: 29 сен 2013, 22:18
Я дергаю код со страницы таким образом...
//откуда будем парсить информацию
$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 "вставляем сюда завершающий код";
//откуда будем парсить информацию
$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 "вставляем сюда завершающий код";
-
- Сообщения: 41
- Зарегистрирован: 29 сен 2013, 22:18
Я попробовал проработать ситуацию таким образом:
//откуда будем парсить информацию
$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/
//откуда будем парсить информацию
$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/
Автоматически обновлялись - это тот еще квест. Предложенный мной способ не дает сбоев, но медленный. При каждом обновлении страницы лезть на чужой сайт и там 100500 страниц парсить - это умереть можно (а еще вполне возможно, что там вас просто забанят). Поэтому вы одним скриптом делаете парсинг данных с чужого сайта, а другим этот скрипт запускаете. Например, по крону раз в час. Не думаю, что там собраны такие важно-срочные вопросы, что отставание на час будет играть какую-то роль.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
-
- Сообщения: 41
- Зарегистрирован: 29 сен 2013, 22:18
Можете приложить пример такого скрипта. А я отдам взамен, что попросите..
Да все просто, в вашем коде вместо echo $content поставьте, например, file_put_contents('content.txt', $content), а на странице, куда надо выводить эти вопросы с ответами поставьте echo file_get_contents('content.txt'). Это в случае, если вы контент храните в файле, тогда еще надо поставить права 0666 на этот файл,чтобы PHP мог записывать в него.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.