Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Двойной парсинг  (Прочитано 3847 раз)
0 Пользователей и 1 Гость смотрят эту тему.
viboxjuwin
Интересующийся

ru
Offline Offline

« : 25-12-2013 09:57 » 

Можно ли вытянуть вот с этой страницы сайта (ссылка ниже) и вопросы и ответы к ним на свой сайт?
Ссылка: http://www.9111.ru/answers/daily/2013_12_24/
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 25-12-2013 10:02 » 

Можно.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
viboxjuwin
Интересующийся

ru
Offline Offline

« Ответ #2 : 25-12-2013 10:17 » 

Я только знаю, как спарсить вопросы, т.е. видимую часть контента на данной странице. Но как спарсить и ответы тоже?!)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 25-12-2013 10:24 » 

Так расскажи нам как спарсить вопросы...
А я подскажу как спарсить ответы Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
viboxjuwin
Интересующийся

ru
Offline Offline

« Ответ #4 : 25-12-2013 10:48 » 

Хорошо)
Вопросы парсим так:

Вот пример действующего парсера:
<?php

//откуда будем парсить информацию
$content = file_get_contents('http://страница с которой парсим.ру/');

//Если при парсинге вместо нормальных букв вы увидите кроказябли, то замените file_get_contents('http://страница с которой парсим.ру/'); на //iconv("windows-1251", "UTF-8", file_get_contents('http://страница с которой парсим.ру/')); - "windows-1251", и "UTF-8", меняйте местами, пока текст не будет выглядеть нормально.

// Определяем позицию строки, до которой нужно все отрезать
$pos = strpos($content, '<p class="news_date"><span class="dNews">');

//Отрезаем все, что идет до нужной нам позиции
$content = substr($content, $pos);

// Точно таким же образом находим позицию конечной строки
$pos = strpos($content, '<p style="text-align:left"><a href="/press-centr/news/" class="arxiv">');

// Отрезаем нужное количество символов от нулевого
$content = substr($content, 0, $pos);

//если в тексте встречается текст, который нам не нужен, вырезаем его
$content = str_replace('НЕнужныйтекст','НУжныйтекст', $content);

// выводим спарсенный текст.
echo ($content);

//echo "вставляем сюда завершающий код";
?>

А как же для ответов?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 25-12-2013 11:51 » 

гы... ну ладно


Код:
// выводим спарсенный текст.
echo ($content);

//echo "вставляем сюда завершающий код";
?>
Найдя первый блок - вопроса, ищем блок ответа, где находится ссылка на ответы
Код:
<div class="q_lnk">


<span style="float:left; font-size: 1.2em;" class="my-questions__city">&nbsp;&nbsp;&nbsp;<a rel="nofollow" href="http://www.****.ru/questions/q3121782-ipotechniy-kredit.html" style="font-size:1.3em; font-weight:bold;">ответов: 1</a></span>
<a href="http://www.****.ru/urists/registration/" class="a_addans">ответить</a>
<a href="/questions/add/">спросить</a>
</div>
т.е. вот эту
Код:
<a rel="nofollow" href="http://www.****.ru/questions/q3121782-ipotechniy-kredit.html" style="font-size:1.3em; font-weight:bold;">
Далее по ранее приведенной процедуре...

Теперь по существу...
Решение парсинга в лоб имеет право на жизнь
Такую задачу нужно решать иначе
1. Получить список ссылок на ответы, а вернее на страницу с вопросом.
2. Парсить уже каждый вопрос с ответами.

использование strpos... решение, но частное. можно сказать трудоемкое, но достаточно нересуросемкое
Использование  file_get_contents - не всегда приемлемо (не каждый шаред хостер разрешает использовать эту функцию для внешних сайтов)

Иногда, страницы отдают и 301 редирект, а это нужно отслеживать

« Последнее редактирование: 25-12-2013 11:52 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
viboxjuwin
Интересующийся

ru
Offline Offline

« Ответ #6 : 25-12-2013 12:38 » 

Но вопросы постоянно обновляются... То есть и ответы и ссылки на них постоянно меняются. Я не смогу спарсить все ответы автоматически твоим методом.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 25-12-2013 12:52 » 

ссылки на страницы вопрос/ответ не меняются.


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
viboxjuwin
Интересующийся

ru
Offline Offline

« Ответ #8 : 25-12-2013 14:12 » 

Как же совместить блок вопроса и ответ в моем коде?

Добавлено через 16 минут и 9 секунд:
Научите же меня. А я, со своей стороны, в обиде не оставлю.

Добавлено через 11 минут и 30 секунд:
Я попробовал проработать ситуацию таким образом:

<?php

//откуда будем парсить информацию
$content = iconv("windows-1251", "UTF-8", file_get_contents('http://www.9111.ru/questions/q3121782-ipotechniy-kredit.html'));

// Определяем позицию строки, до которой нужно все отрезать
$pos = strpos($content, '<div id="qcontent" class="question-content__small">');

//Отрезаем все, что идет до нужной нам позиции
$content = substr($content, $pos);

// Точно таким же образом находим позицию конечной строки
$pos = strpos($content, '<br></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-ipotechniy-kredit.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/
« Последнее редактирование: 25-12-2013 14:40 от viboxjuwin » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 25-12-2013 15:37 » 

Я весь алгоритм расписал

В блоке вопросы получить ссылку на страницу вопрос/ответ

Парсить же страницу вопрос/ответ


Добавлено через 4 минуты и 25 секунд:
Научить парсингу?

Но ведь все элементарно...
Заходим на страницу h**p://www.9111.ru/answers/daily/2013_12_24/

Получаем ссылки на ответы

Сохраняем их в списке/массиве/файле

Теперь бегаем по по этим ссылкам и парсим
вопрос
и получаем список ответов
Это же элементарно...

« Последнее редактирование: 25-12-2013 15:42 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
viboxjuwin
Интересующийся

ru
Offline Offline

« Ответ #10 : 25-12-2013 15:55 » 

Так я и изобразил нечто подобное-элементарное)
Но получается, что каждый вопрос-ответ имеет свою уникальную ссылку..
Потому нет никакого автоматического обновления спарсенного...

Добавлено через 1 час, 4 минуты и 56 секунд:
Может быть Вы меня не совсем поняли?
По ссылке, про которую Вы говорите, я спарсю максимум один вопрос и один ответ к нему. Но они будут статически висеть на сайте - это первое. Новые вопросы и ответы прибавляться не будут - это второе.
И повторюсь, я в долгу не останусь)
У меня просьба. Покажите поэтапно.
И повторюсь, я в долгу не останусь)
« Последнее редактирование: 25-12-2013 17:00 от viboxjuwin » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 25-12-2013 22:56 » 

Но ведь все элементарно...
Заходим на страницу h**p://www.9111.ru/answers/daily/2013_12_24/

Получаем ссылки на ответы

Сохраняем их в списке/массиве/файле

Теперь бегаем по по этим ссылкам и парсим
вопрос
и получаем список ответов
Это же элементарно...

Цитата
По ссылке, про которую Вы говорите, я спарсю максимум один вопрос и один ответ к нему.
Нет
Ты спарсишь столько ответов, сколько там есть
http://www.9111.ru/questions/q3121796-prodaga-kvartiri-sirotoy.html
Вот здесь их будет два


Возможно, позже... их там будет и больше, но ты об этом не узнаешь, пока снова не попадешь на эту страницу.


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 25-12-2013 22:59 » 

там, кстати, хорошая структура для парсинга ответов
Каждый ответ с уникальной меткой
Поэтому можно в базе сохранить вопрос, и ответы с айди ответами с момнта последнего парсинга.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines