Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2014, 11:53   #1
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию PHP парсинг

Кто может дать пример как спарсит со страницы несколько кусков кода.
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Старый 16.01.2014, 13:33   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

в интернетах море-океан примеров
ADSoft вне форума Ответить с цитированием
Старый 16.01.2014, 17:15   #3
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Кто? у кого спарсит?
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 18.01.2014, 22:23   #4
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Да я в PHP полный ноль) хочу научится парсить определенный крнтент с одного или нескольких сайтов, по delphi я не много понял как а вот с ПХП впервые столкнулся, не подскажите мне пару примеров? я дальше сам пойму думаю=)
Моя задача такая.
Есть 1 сайт есть в нем один <div>здесь инфа</div>
Как мне именно этот див спарсить и отобразить на своей странице? надо чтоб дизайн блока был такой же и не отличался от сайто с которого я буду парсить...
можете дать примеры если не трудно? (с коментариями если можно)
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Старый 19.01.2014, 11:30   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не подскажите мне пару примеров?
Может стоит начать с книги по ПХП?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.01.2014, 12:36   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Лубышев Посмотреть сообщение
Кто? у кого спарсит?
Таак. Появился новый синоним слова "слямзить" .
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 20.01.2014, 13:52   #7
Feelnoobskill
Пользователь
 
Регистрация: 19.03.2013
Сообщений: 13
По умолчанию

Скачайте библиотеку simple html dom. Она очень легкая в использовании.
Почитать о её применении можно тут http://net.tutsplus.com/tutorials/ph...l-dom-library/
Feelnoobskill вне форума Ответить с цитированием
Старый 20.01.2014, 16:45   #8
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Вот пример, мне не жалко. тут класс для парсинга с функцией регулярки.
Код:
class parser_pleer
{
	function get($url)
	{
	$pleer=file_get_contents($url);
	return $pleer;
	}

	function regularca($content)
	{

	if (preg_match('/(<div id="ja-pathwaywrap" class="clearfix">.*<\/div>).*<div id="ja-footerwrap">/is', $content, $matches)) 

	{
	echo $matches[1];
	} 
	else {echo "Not found";}
	}

}
Armatus вне форума Ответить с цитированием
Старый 19.02.2014, 08:58   #9
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию

Коль пошли кодом кидаться... У меня для каждого отдельного сайта написан класс типа:
PHP код:
class PenzaNewsContentReader extends lmbUriContentReader
{     
  protected 
$data;
  function 
getContent()
  {
    if(
$this->data)
      return 
$this->data;

    while(
$line fgets($this->resource5000))
      
$this->content .= $line;
    
$this->data = array();
    
$title_re='~<meta\s*name\s*=\s*"title"\s*content\s*=\s*[\'"]([^\'"]+)[\'"]~';
    if(
preg_match_all($title_re$this->content$matches))
      
$this->data['title']=$matches[1][0];

    
$key_re='~<meta\s*name\s*=\s*["\']keywords["\']\s*content\s*=\s*[\'"]([^\'"]+)[\'"]~';
    if(
preg_match_all($key_re$this->content$matches))
      
$this->data['keywords']=str_replace('PenzaNews,','',$matches[1][0]);
    
    
    
$content_re='~<div class="ju_text">(.+?)<div class="pagination">~is';
    if(
preg_match_all($content_re$this->content$matches))
    {
      
$content preg_replace('~<strong class="city-text">[^<]+</strong>~is','',$matches[1][0]);
      
$this->data['content']=strip_tags(trim($content),'<p>');

      
$annot_re='~<p>([^<]+)</p>~';
      if(
preg_match_all($annot_re$this->data['content'], $matches))
        
$this->data['annotation']=$matches[1][0];
    
      
      
$img_re='~<img[^\/>]+src\s*=\s*[\'"]([^\'"]+)[\'"]~';
      if(
preg_match_all($img_re$content$matches))
      {
        
$img = new lmbUri($matches[1][0]);
        
$this->_normalizeUriUsingContext($img$this->uri);
        
$this->data['tmp_img']= $this->cacheRemoteImage($img->toString());
      }  
    }

    return 
$this->data;
  }
  
  function 
_normalizeUriUsingContext($uri$context_uri)
  {
    if(!
$uri->getHost())
    {
      
$uri->setHost($context_uri->getHost());

      if((
$path $context_uri->getPath()) && $uri->isRelative())
      {
        
$path preg_replace('~(.*)(/[^/]*)$~''$1/'$path);
        
$uri->setPath($path $uri->getPath());
      }
    }

    if(!
$uri->getProtocol())
      
$uri->setProtocol($context_uri->getProtocol());

    
$uri->setAnchor('');

    
$uri->normalizePath();
  }
  
  function 
cacheRemoteImage($url)
  {
    
$contents = @file_get_contents($url);
    
$filename substr(md5(time()), 05) . '_' basename($url);

    
$cachepath lmbToolkit::instance()->getConf('common')->get('temp_file_storage');
    
$cachepath $cachepath['store_rules']['path'];
    
    if(
is_writable($cachepath) && $contents)
    {
      
file_put_contents($cachepath '/' $filename$contents);
      return 
$cachepath '/' $filename
    }

    return 
'';
  }
  function 
reset()
  { 
    
parent::reset();
    
$this->data null;
  }

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

Алгоритм примерно такой:
1. загружаем страницу
2. используя регулярные выражения выбираем из загруженной страницы нужное.
3. Делаем свое черное дело с полученной информацией.

В моем случае данные читаются из $this->resource - (если не загоняться - fopen($url))
Собранная информация помещается $this->data. Далее она заносится в базу.

ссылки на страницы с информацией добываются аналогичным образом:
1. открываете страницу со списком новостей, по регулярным выражениям извлекаете ссылки на новости.
2. Загружаете каждую новость по отдельности кодом типа приведенного выше
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.

Последний раз редактировалось vasiatka; 19.02.2014 в 09:05.
vasiatka вне форума Ответить с цитированием
Старый 08.06.2014, 19:29   #10
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

всем спасибо за ответы буду тестить отпишусь)
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг xml (yml) в php, получение значений. DarkHacker PHP 3 02.07.2012 11:46
Парсинг TranceSmile PHP 7 06.03.2012 01:32
Парсинг DeDoK Общие вопросы Delphi 8 02.02.2011 14:20
Парсинг PHP или... Dionix Общие вопросы Delphi 5 10.07.2010 22:16
Парсинг XML на PHP Fellics{новичок} PHP 7 07.07.2010 19:46