Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Парсер kinopoisk

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: с помощью snoopy и регулярок
Viper
Отправлено: 22 Октября, 2009 - 14:35:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Собстно задача проста(почти). Нужно получить по названию фильма, его описание.

PHP:
скопировать код в буфер обмена
  1. include('class.parse.php');
  2.  
  3. $search_url = 'http://www.kinopoisk.ru/index.php?kp_query=';
  4. $movie_url = 'http://www.kinopoisk.ru/level/1/film/';
  5. $url_start = '<a class="all" href="/level/1/film/';
  6. $url_end = '/sr/1/">';
  7. $movie = urlencode('Зачарованная');
  8.  
  9. $snoopy = new Snoopy;
  10. $snoopy->proxy_host = '10.30.20.2';
  11. $snoopy->proxy_port = '3128';
  12. $snoopy->user = 'username';
  13. $snoopy->pass = 'password';
  14. $snoopy->agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
  15. $snoopy->referer = 'http://www.kinopoisk.ru/index.php?kp_query='.$movie;
  16. $snoopy->rawheaders['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0';
  17. $snoopy->rawheaders['Pragma'] = 'no-cache';
  18. $snoopy->rawheaders['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
  19. $snoopy->rawheaders['Accept-Language'] = 'ru,en-us;q=0.7,en;q=0.3';
  20. $snoopy->cookies['users_info[check_sh_bool]'] = 'none';
  21. $snoopy->cookies['comm_sort'] = 'mix';
  22. $snoopy->cookies['forum_data[login]'] = $snoopy->pass;
  23.  
  24. if ($snoopy->fetch($search_url.$movie)) {
  25.         $f = $snoopy->results;
  26.         $begin = strpos(strtolower ($f), $url_start, 0);
  27.         $end = strpos(strtolower ($f), $url_end, $begin);
  28.         $movie_id = substr($f, $begin+35, $end-$begin-35);
  29.  
  30.         $snoopy->fetch($movie_url.$movie_id.'/');
  31. } else {
  32.         echo 'error fetching document: '.$snoopy->error.'<br>';
  33. }


тут собстно дальше-то и затык. id фильма получили, страницу получили, дальше нужно разбирать саму страницу.

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

может кто-то помочь с этим делом?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 22 Октября, 2009 - 15:16:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




лучше приведи кусок текста и скажи, что из него надо выдернуть
 
 Top
Viper
Отправлено: 22 Октября, 2009 - 15:37:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




много кусков нужно приводить :)

CODE (text):
скопировать код в буфер обмена
  1. <h1 style="margin: 0; padding: 0" class="moviename-big">Зачарованная&nbsp;</h1>
  2. ...
  3. <td style="width: 100%">
  4.             <span style="color: #666; font-size: 13px">Enchanted</span>
  5.          </td>
  6. ...
  7. <table class="info">
  8.  
  9.    <tr><td class="type">год</td><td class=""><a href="/level/10/m_act%5Byear%5D/2007/">2007</a></td></tr>
  10.  
  11.  
  12.    <tr><td class="type">страна</td><td class=""><a href="/level/10/m_act%5Bcountry%5D/3/">США</a></td></tr>
  13.  
  14.  
  15.    <tr><td class="type">слоган</td><td>&laquo;Все еще ждешь принца?.. Добро пожаловать в реальный мир.&raquo;</td></tr>
  16.    <tr><td class="type">режиссер</td><td><a href="/level/4/people/10817/">Кевин Лима</a></td></tr>
  17.  
  18.    <tr><td class="type">сценарий</td><td><a href="/level/4/people/25433/">Билл Келли</a></td></tr>
  19.    <tr><td class="type">продюсер</td><td><a href="/level/4/people/21224/">Кристофер Чейз</a>, <a href="/level/4/people/8618/">Бэрри Джозефсон</a>, <a href="/level/4/people/25475/">Сунил Перкаш</a>, <a href="/level/19/film/106165/#Продюсеры">...</a></td></tr>
  20.    <tr><td class="type">оператор</td><td><a href="/level/4/people/85510/">Дон Бёрджесс</a></td></tr>
  21.  
  22.    <tr><td class="type">композитор</td><td><a href="/level/4/people/609710/">Алан Менкен</a></td></tr>
  23.    <tr><td class="type">жанр</td><td><a href="/level/10/m_act%5Bgenre%5D/5/">фэнтези</a>, <a href="/level/10/m_act%5Bgenre%5D/6/">комедия</a>, <a href="/level/10/m_act%5Bgenre%5D/7/">мелодрама</a>, <a href="/level/10/m_act%5Bgenre%5D/9/">мюзикл</a>, <a href="/level/10/m_act%5Bgenre%5D/10/">приключения</a>, <a href="/level/10/m_act%5Bgenre%5D/11/">семейный</a></td></tr>
  24.  
  25.    <tr><td class="type">бюджет</td><td class="dollar"><a href="/level/85/film/106165/">$85&nbsp;000&nbsp;000</a></td></tr>
  26.  
  27.    <tr><td class="type">сборы в США</td><td class="dollar"><a href="/level/85/film/106165/">$127&nbsp;807&nbsp;262</a></td></tr>
  28.  
  29.    <tr><td class="type">сборы в мире</td><td class="dollar"><a href="/level/85/film/106165/">+&nbsp;$212&nbsp;680&nbsp;390&nbsp;=&nbsp;$340&nbsp;487&nbsp;652</a></td></tr>
  30.  
  31.    <tr><td class="type">сборы в России</td><td class="dollar"><a href="/level/42/weekend/2007-11-22/type/rus/cur/RUB/">$5&nbsp;869&nbsp;783</a></td></tr>
  32.  
  33.    <tr><td class="type">DVD в США</td><td class="dollar"><a href="/level/54/sunday/20080323/">$87&nbsp;422&nbsp;164</a></td></tr>
  34.  
  35.    <tr><td class="type">зрители</td><td class="dollar"><img src="/images/flags/flag-3.gif" width=16 height=11 alt="США">&nbsp;&nbsp;18.4 млн.&nbsp;&nbsp;&nbsp;&nbsp;<img src="/images/flags/flag-11.gif" width=16 height=11 alt="Великобритания">&nbsp;&nbsp;3.34 млн.&nbsp;&nbsp;&nbsp;&nbsp;<img src="/images/flags/flag-8.gif" width=16 height=11 alt="Франция">&nbsp;&nbsp;1.75 млн.</td></tr>
  36.  
  37.  
  38.    <tr><td class="type">премьера (мир)</td><td class="calendar"><a href="/level/80/film/106165/">20 октября 2007</a></td></tr>
  39.  
  40.    <tr><td class="type">премьера (РФ)</td><td class="calendar"> <a class='all' href='/level/8/view/prem/year/2007/#106165'>22 ноября 2007</a>,&nbsp;<a href='/level/10/m_act[company]/127/' class='all'>&laquo;BVSPR&raquo;</a></td></tr>
  41.  
  42.    <tr><td class="type">релиз на DVD</td><td class="dvd"><a href='/level/50/year/2009/month/08/#106165_2009-08-03' class='all'>3&nbsp;августа&nbsp;2009</a>, <a class='all' href='/level/50/year/2009/company/6/'>&laquo;CP-DIGITAL&raquo;</td></tr>
  43.  
  44.    <tr><td class="type">рейтинг MPAA</td><td class="rate_pg"><a href='/level/38/film/106165/rn/PG/'><img src='/images/mpaa/PG.gif' height=11 alt='рейтинг PG' border=0></a>&nbsp;</td></tr>
  45.  
  46.    <tr><td class="type">время</td><td class="time" id='runtime'>103 мин.</td></tr>
  47. </table>


собственно вот эти данные. год, режиссер, композитор и т.д.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 22 Октября, 2009 - 16:00:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




preg_match('/>([^<]+)</td><td class=""><[^>]+>([^<]+)</', $src, $matches);
var_dump($matches);
 
 Top
Viper
Отправлено: 22 Октября, 2009 - 16:23:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




результат
Warning: preg_match() [function.preg-match]: Unknown modifier 't' in D:\WWW\htdocs\1\parse\index.php on line 34
NULL


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 22 Октября, 2009 - 16:32:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




<\/td вот так сделай вместо </td
 
 Top
Viper
Отправлено: 23 Октября, 2009 - 08:54:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




угу.
а можно ли как-то избавится от первого элемента в массиве?

CODE (text):
скопировать код в буфер обмена
  1. Array
  2. (
  3.     [0] => >год</td><td class=""><a href="/level/10/m_act%5Byear%5D/2007/">2007<
  4.     [1] => 2007
  5. )

и как заменить class="" на что-то универсальное. т.е. класс может указываться а может и нет.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 23 Октября, 2009 - 09:13:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Viper пишет:
избавится от первого элемента в массиве?
Никак. Первый элемент - то что соотсветствует всему шаблону, а дальше все скобки.
Viper пишет:
т.е. класс может указываться а может и нет.
(class="")?
Или <td[^>]*>
 
 Top
ronin
Отправлено: 20 Марта, 2010 - 16:54:29
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Задача та же. Нужно спарсить нужную информацию согласно шаблону.

Как избавиться от ссылок? <a href="/level/10/m_act%5Bgenre%5D/3/">боевик</a>

(Отредактировано автором: 20 Марта, 2010 - 21:55:58)

 
 Top
Viper
Отправлено: 22 Марта, 2010 - 07:32:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




ronin думаю что как-то так

(Отредактировано автором: 22 Марта, 2010 - 07:35:20)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
ronin
Отправлено: 26 Марта, 2010 - 17:24:25
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Что-то я на кодил не так. Не выводит переменную $name

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. //error_reporting(0);
  4. $kp_link="http://www.kinopoisk.ru/level/1/film/4205/";
  5. //if ($_REQUEST['champion'] !== 'raikkonen') exit();
  6. include "snoopy.class.php";
  7. $snp = new Snoopy();
  8.  
  9. $snp->host = "http://www.kinopoisk.ru";
  10. $snp->agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3";
  11. $snp->fetch($kp_link);
  12. $res=$snp->results;
  13.  
  14.  
  15. $name = '<h1 style="margin: 0; padding: 0" class="moviename-big">';
  16. $name_position = strpos($res, $name);
  17.         $result = substr($res, $name_position, 300);
  18.         //print $result;
  19. preg_match_all('|<a href="/level/10/m_act%5Bgenre%5D/(\d+)/">(.+)</a>|U', $result, $match);
  20.         $name = $match[0][0].$match[1][0].$match[2][0];
  21. print $name;
  22. ?>
  23.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB