Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выдирание новости из сайта 
V
    Опции темы
fridkaratel
Дата 29.4.2009, 02:07 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



В-общем, возникла такая задача...
Не знаю, как лучше всего сделать...
Через str_pos, думаю, долго будет, а через preg_replace (или что-то такое) делать не умею.

Суть скрипта такова: на другом сайте есть новости. Их необходимо выдергивать и заносить к себе на сайт.

Выглядит это так: список ссылок, при нажатии на ссылку попадаем на информацию о новости.

Вот код, который выводит список ссылок. Я привел здесь одну из ссылок, выдернутую с сайта:
Код
<tr > <td class='imageCell '> </td> <td class='descriptionCell'> <strong> <a name="4745029" class=' bulletinLink' href="/4745029.html" >Небывалый снегопад</a> </strong></td> <td class='priceCell' nowrap="nowrap"> </td> <td class='dateCell' nowrap="nowrap"> 09:28, сегодня&nbsp; <span class='views' title='Число просмотров новости'>20</span> <br /> <span class="city"> Новосибирск </span> </td> <td class='actionCell'> <noindex> <a href='/bulletin/4745029/up' class='up active' rel='nofollow' title='Поднять рейтинг новости'> поднять </a> </noindex> </td> </tr>


При нажатии на ссылку, переходим в описание новости. Вот шаблон описания:
Код
<div class="bulletinText">Сегодня утром в Новосибирске выпал небывалый снегопад. Уровень снега достигал порой 1 метра. <br />Администрация города уже приняла меры по ликвидации и освобождению дорог от осадков.</div> <div id="bulletinAuthor"> <br/> <span class='icq'>993879123 </span><br> <a href="mailto:[email protected]?subject=Небывалый снегопад">[email protected]</a><br> </div> <div class="bulletinImages"> <div><img src='http://novosib.ru/bulletins_images/2/3/6/1356587339.jpg' title="" > </div> </div>


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

Кто что может подсказать, посоветовать?
Прошу подробней, потому что в именно этом деле я мало что соображаю smile

Это сообщение отредактировал(а) fridkaratel - 29.4.2009, 08:18
PM   Вверх
lelik133
Дата 29.4.2009, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 5
Всего: 14



воровать чужой контент плохо
PM ICQ   Вверх
InvalidProperty
Дата 29.4.2009, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: 2
Всего: 9



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

if(preg_match('#<a name="(\d+)" class=\' bulletinLink\' href="/\1.html"#'), $FIRST_STRING, $matches)
{
 for($i = 0; $i < count($matches[1]); $i++)
 {
  if(preg_match('#<div class="bulletinText">(.+)</div> <div id="bulletinAuthor">#Us', $matches[1][$i], $news))
  {
   echo $news[1];
  }
  else
  {
   echo 'no news';
  }
 }
}
else
{
 echo 'no hrefs';
}

, т.о. строчка echo $news[1]; выведет искомую новость.

ЗЫ В рег. выражениях нет ничего сложного, просто нужно пару раз ман от начала до конца прочитать.

Добавлено через 25 секунд
кстати, господин lelik133, прав


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
fridkaratel
Дата 29.4.2009, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



Цитата(lelik133 @ 29.4.2009,  16:09)
воровать чужой контент плохо

Я их не размещаю на своем сайте - я их заношу к себе на сайт. То есть закидываю в БД.
Как закинуть в БД знаю, а вот с выдиранием ни разу не работал...

Мне просто нужно хранить архив новостей с разных сайтов, а быстрее (и легче) его не самому сохранять постранично на диски или в текстовый файл, а выдирать и раскидывать по категориям с помощью php-скрипта, который будет выполняться на сервере. Так я избавлю себя от выкачивания лишней информации типа баннеров, рекламы и т.п...

Во-от smile

То есть я не ворую, а создаю архив в своей БД. Размещаться эти новости нигде не будут.
Поэтому и хотелось бы превратить текст полученной странички в переменные php, которые я бы смог потом закинуть в БД.

Это сообщение отредактировал(а) fridkaratel - 29.4.2009, 08:24
PM   Вверх
InvalidProperty
Дата 29.4.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: 2
Всего: 9



у меня там ошибка выше. Утро раннее, не проснулся еще. код должен быть таким
Код

if(preg_match('#<a name="(\d+)" class=\' bulletinLink\' href="/\1.html"#'), $FIRST_STRING, $matches)
{
 for($i = 0; $i < count($matches[1]); $i++)
 {
  // скачиваем контент страницы $matches[1][$i].html
  // допустим мы получили контент страницы в переменную $content
  if(preg_match('#<div class="bulletinText">(.+)</div> <div id="bulletinAuthor">#Us', $content, $news))
  {
   echo $news[1];
  }
  else
  {
   echo 'no news';
  }
 }
}
else
{
 echo 'no hrefs';
}



--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
fridkaratel
Дата 29.4.2009, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



Цитата(InvalidProperty @ 29.4.2009,  16:38)
у меня там ошибка выше. Утро раннее, не проснулся еще. код должен быть таким

Там еще в первой строке скобка не там стоит smile

Есть одно но - выдает ссылку не 4745029, а просто первую цифру - 4.

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

Это сообщение отредактировал(а) fridkaratel - 29.4.2009, 09:09
PM   Вверх
ksnk
Дата 29.4.2009, 09:00 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



fridkaratel, Вообще-то новости, обычно, распространяются rss-лентами. И воровать ничего не приходится. RSS- обычный xml, который можно пропарсить каким нибудь xml парсером.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
fridkaratel
Дата 29.4.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



Цитата(ksnk @ 29.4.2009,  17:00)
fridkaratel, Вообще-то новости, обычно, распространяются rss-лентами. И воровать ничего не приходится. RSS- обычный xml, который можно пропарсить каким нибудь xml парсером.

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

Это сообщение отредактировал(а) fridkaratel - 29.4.2009, 09:14
PM   Вверх
InvalidProperty
Дата 29.4.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: 2
Всего: 9



Цитата(fridkaratel @  29.4.2009,  08:57 Найти цитируемый пост)
Есть одно но - выдает ссылку не 4745029, а просто первую цифру - 4.

а, ну да! потому что нужно preg_match_all использовать
Код

preg_match_all('#<a name="(\d+)" class=\' bulletinLink\' href="/\1.html"#', $FIRST_STRING, $matches)

тогда $matches[1] будет содержать массив вхождений первой подмаски


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0765 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.