|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Сбор информации с сайта и ее обработка. |
|
|
[решено] Сбор информации с сайта и ее обработка.
|
$AutoITer Сообщения: 446 |
Собственно хочу добавить в программу сбор информации о ЛЮБОМ фильме с портала Кинопоиск, да еще и так что бы работало все время правильно. Вот список для сбора.
<tr><td> <h1 style="margin: 0; padding: 0" class="moviename-big">Бросок кобры </h1> </td></tr> <tr><td> <table style="width: 100%; border: none" cellspacing=0 cellpadding=0> <tr> <td style="width: 100%"> <span style="color: #666; font-size: 13px">G.I. Joe: The Rise of Cobra</span> </td> <tr><td class="type">год</td><td class=""><a href="/level/10/m_act%5Byear%5D/2009/">2009</a></td></tr> <tr><td class="type">страна</td><td class=""><a href="/level/10/m_act%5Bcountry%5D/3/">США</a></td></tr> <tr><td class="type">слоган</td><td>«Когда остальные сдаются, они идут до конца»</td></tr> <tr><td class="type">режиссер</td><td><a href="/level/4/people/23076/">Стивен Соммерс</a></td></tr> <tr><td class="type">жанр</td><td><a href="/level/10/m_act%5Bgenre%5D/2/">фантастика</a>, <a href="/level/10/m_act%5Bgenre%5D/3/">боевик</a>, <a href="/level/10/m_act%5Bgenre%5D/4/">триллер</a>, <a href="/level/10/m_act%5Bgenre%5D/10/">приключения</a></td></tr> <tr><td class="type">бюджет</td><td class="dollar"><a href="/level/85/film/397496/">$175 000 000</a></td></tr> <tr><td class="type">сборы в мире</td><td class="dollar"><a href="/level/85/film/397496/">+ $91 500 000 = $190 077 529</a></td></tr> <tr><td class="type">премьера (мир)</td><td class="calendar"><a href="/level/80/film/397496/">5 августа 2009</a></td></tr> <tr><td class="type">премьера (РФ)</td><td class="calendar"> <a class='all' href='/level/8/view/prem/year/2009/#397496'>6 августа 2009</a>, <a href='/level/10/m_act[company]/7/' class='all'>«Централ Партнершип»</a></td></tr> <tr><td colspan=3 style="padding:10px;padding-left:20px;" class="news"> <span class="_reachbanner_">Базирующееся в Египте высокотехнологичное международное военное подразделение, известное как G.I. Joe, противостоит зловещей корпорации, руководимой знаменитым оружейным бароном.</span> </td></tr> <div style="color: #f60; font-family: tahoma; font-size: 25px"><a href="/level/83/film/397496/" class="continue" style="background: url(/images/dot_or.gif) 0 93% repeat-x; font-weight: normal !important; text-decoration: none">7.047<span style="font:100 14px tahoma, verdana"> 4163</span></a> </div> <div style="color:#999;font:100 11px tahoma, verdana">IMDB: 6.10 (12 210)</div><div style="color:#999;font:100 11px tahoma, verdana">ожидание: <a href="/level/53/" style='color:#999;font:100 11px tahoma, verdana; text-decoration:underline;'>64%</a> (8 014)</div> </div> Я набросал кое что. Но не думаю что у меня правильно получилось ![]() Func _Get() $Sourse = _INetGetSource ($URL) $sName = StringRegExpReplace($Sourse, '<h1 style=".*" class=".*">(.*)</h1>.*', '\1') $sName = StringReplace($sName, ' ', ' ') $sOriginal = StringRegExpReplace($Sourse,'<span style="color: #666; font-size: 13px">(.*)</span>', '\1') $sGod = StringRegExpReplace($Sourse,'<tr><td class="type">год</td><td class=""><a href=".*">.(.*)</a></td></tr>', '\1') $sStrana = StringRegExpReplace($Sourse,'<tr><td class="type">страна</td><td class=""><a href=".*">(.*)</a></td></tr>', '\1') $sSlogan = StringRegExpReplace($Sourse,'<tr><td class="type">слоган</td><td>(.*)</td></tr>','\1') $sSlogan = StringReplace($sName, '»', '"') $sRejisser =StringRegExpReplace($Sourse,'<tr><td class="type">режиссер</td><td><a href=".*">(.*)</a></td></tr>','\1') $sJanr = StringRegExp($Sourse,'<tr><td class="type">жанр</td><td><a href=".*">(.*)</a>.*',) $sSbory = StringRegExpReplace($Sourse,,'\1') $sMir =StringRegExpReplace($Sourse,,'\1') $sRF = StringRegExpReplace($Sourse,,'\1') $sTime = StringRegExpReplace($Sourse,,'\1') $sKratk = StringRegExpReplace($Sourse,,'\1') $sRait = StringRegExpReplace($Sourse,,'\1') $sIdmb = StringRegExpReplace($Sourse,,'\1') $sBudget = StringRegExpReplace($Sourse, '<tr><td class="type">бюджет</td><td class=".*"><a href=".*">(.*)</a>.*', '\1') $sBudget = StringReplace($sBudget, ' ', ' ') EndFunc ![]() |
|
------- Отправлено: 13:17, 18-08-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата:
|
|
------- Отправлено: 15:17, 18-08-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
$AutoITer Сообщения: 446
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 15:31, 18-08-2009 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Medic84, На будущее, всегда выкладывай рабочий пример, в твоём коде также нехватает инклюда Inet.au3.
Цитата Medic84:
P.S А в чём смысл замены пробела на пробел? ![]() |
|
------- Отправлено: 16:04, 18-08-2009 | #4 |
$AutoITer Сообщения: 446
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
Цитата Creat0R:
Цитата Creat0R:
![]() |
||||
------- Отправлено: 16:11, 18-08-2009 | #5 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Medic84:
|
|
------- Отправлено: 16:20, 18-08-2009 | #6 |
$AutoITer Сообщения: 446
|
Профиль | Отправить PM | Цитировать В опере нажимаю "Исходный код".
Думаешь через IE нужно страницу сохранять? З.Ы. А ты пробовал слеш убирать? ![]() |
------- Отправлено: 16:27, 18-08-2009 | #7 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Medic84:
Вобщем вот рабочий вариант получения информации о фильме по ссылке. Исходник добывается извращённым путём - через скрытую инстанцию браузера IE ![]() #include <IE.au3> $sURL = "http://www.kinopoisk.ru/level/1/film/333416/" $sURL = InputBox("Kinopoisk.ru Informer", "Введите ссылку на фильм для получения информации:", $sURL, "", 350, 200) If @error Then Exit $oIE = _IECreate($sURL, 0, 0) $sSource = _IEDocReadHTML($oIE) _IEQuit($oIE) $sName = _GetSourceProperty($sSource, '', '(?si).*?<h1 class=moviename-big.*?>(.*?)</h1>.*') $sSlogan = _GetSourceProperty($sSource, 'слоган') $sBudget = _GetSourceProperty($sSource, 'бюджет') $sYear = _GetSourceProperty($sSource, 'год') $sCountry = _GetSourceProperty($sSource, 'страна') $sDirector = _GetSourceProperty($sSource, 'режиссер') $sUSA_Collect = _GetSourceProperty($sSource, 'сборы в США') $sWorld_Collect = _GetSourceProperty($sSource, 'сборы в мире') $sRus_Collect = _GetSourceProperty($sSource, 'сборы в России') $sTime = _GetSourceProperty($sSource, 'время') $aJanrs = StringRegExp($sSource, '.*?<A href="/level/10/.*?genre.*?">(.*?)</A>.*?', 3) $sJanrs = "" $iUbound = UBound($aJanrs)-1 For $i = 0 To $iUbound $sJanrs &= $aJanrs[$i] If $i < $iUbound Then $sJanrs &= ", " Next $sInfo = StringFormat( _ "Имя:\t\t\t%s\n" & _ "Слоган:\t\t\t%s\n" & _ "Бюджет:\t\t\t%s\n" & _ "Год:\t\t\t%s\n" & _ "Страна:\t\t\t%s\n" & _ "Режиссер:\t\t%s\n" & _ "Сборы в США:\t\t%s\n" & _ "Сборы в мире:\t\t%s\n" & _ "Сборы в России:\t\t%s\n" & _ "Время:\t\t\t%s\n\n" & _ "Жанр:\t\t\t%s", _ $sName, $sSlogan, $sBudget, $sYear, $sCountry, $sDirector, $sUSA_Collect, $sWorld_Collect, $sRus_Collect, $sTime, $sJanrs) MsgBox(64, 'Kinopoisk.ru Info', $sInfo) ;Функция для получения подстроки по заданному pattern Func _GetSourceProperty($sSource, $sName, $sPattern='') Local $s_Pattern = '(?si).*?<TD class=type>%s</TD>.*?<TD(?: class=.*?|)>(?:<A href=".*?">|)(.*?)(?:</A>|)</TD></TR>.*' If $sPattern <> '' Then $s_Pattern = $sPattern $s_Pattern = StringFormat($s_Pattern, $sName) Local $sRet = StringRegExpReplace($sSource, $s_Pattern, '\1') If @extended = 0 Then Return SetError(1, 0, "N/A") $sRet = StringReplace($sRet, ' ', ' ') $sRet = StringRegExpReplace($sRet, '\A«+|»+$', '"') Return $sRet EndFunc |
|
------- Отправлено: 17:34, 18-08-2009 | #8 |
$AutoITer Сообщения: 446
|
Профиль | Отправить PM | Цитировать Если бы можно было оценку поставить поставил бы 10 баллов!
|
------- Отправлено: 18:01, 18-08-2009 | #9 |
$AutoITer Сообщения: 446
|
Профиль | Отправить PM | Цитировать Хех. Пытался вставить свое и свое ничего не работает. Кроме краткого....
Причем в твоем скрипте "Имя" не работает. #include <IE.au3> $sURL = "http://www.kinopoisk.ru/level/1/film/5090/" $sURL = InputBox("Kinopoisk.ru Informer", "Введите ссылку на фильм для получения информации:", $sURL, "", 350, 200) If @error Then Exit $oIE = _IECreate($sURL, 0, 0) $sSource = _IEDocReadHTML($oIE) _IEQuit($oIE) $sName = _GetSourceProperty($sSource, '', '(?si).*?<h1 class=moviename-big>(.*?)</h1>.*') $sSlogan = _GetSourceProperty($sSource, 'слоган') $sBudget = _GetSourceProperty($sSource, 'бюджет') $sYear = _GetSourceProperty($sSource, 'год') $sCountry = _GetSourceProperty($sSource, 'страна') $sMir = _GetSourceProperty($sSource, 'премьера (мир)') $sRF = _GetSourceProperty($sSource, 'премьера (РФ)') $sOriginal = _GetSourceProperty($sSource, '','?si).*?<span style="color:.*? font-size:.*?">(.*?)</span>.*') $sDirector = _GetSourceProperty($sSource, 'режиссер') $sWorld_Collect = _GetSourceProperty($sSource, 'сборы в мире') $sTime = _GetSourceProperty($sSource, 'время') $aJanrs = StringRegExp($sSource, '.*?<A href="/level/10/.*?genre.*?">(.*?)</A>.*?', 3) $sJanrs = "" $Kratk = _GetSourceProperty($sSource, '','(?si).*?<span class=_reachbanner_.*?>(.*?)</span>.*') $Kratk = StringReplace($Kratk,"<BR>",@CRLF) $iUbound = UBound($aJanrs)-1 For $i = 0 To $iUbound $sJanrs &= $aJanrs[$i] If $i < $iUbound Then $sJanrs &= ", " Next $sInfo = StringFormat( _ "Имя:\t\t\t%s\n" & _ "Слоган:\t\t\t%s\n" & _ "Бюджет:\t\t\t%s\n" & _ "Год:\t\t\t%s\n" & _ "Страна:\t\t\t%s\n" & _ "Режиссер:\t\t%s\n" & _ "Премьера (Мир):\t\t%s\n" & _ "Сборы в мире:\t\t%s\n" & _ "Премьера (РФ):\t\t%s\n" & _ "Время:\t\t\t%s\n\n" & _ "Жанр:\t\t\t%s", _ $sName, $sSlogan, $sBudget, $sYear, $sCountry, $sDirector, $sMir, $sWorld_Collect, $sRF, $sTime, $sJanrs) MsgBox(64, 'Kinopoisk.ru Info', $sInfo) ;Функция для получения подстроки по заданному pattern Func _GetSourceProperty($sSource, $sName, $sPattern='') Local $s_Pattern = '(?si).*?<TD class=type>%s</TD>.*?<TD(?: class=.*?|)>(?:<A href=".*?">|)(.*?)(?:</A>|)</TD></TR>.*' If $sPattern <> '' Then $s_Pattern = $sPattern $s_Pattern = StringFormat($s_Pattern, $sName) Local $sRet = StringRegExpReplace($sSource, $s_Pattern, '\1') If @extended = 0 Then Return SetError(1, 0, "N/A") $sRet = StringReplace($sRet, ' ', ' ') $sRet = StringRegExpReplace($sRet, '\A«+|»+$', '"') Return $sRet EndFunc |
------- Отправлено: 20:53, 18-08-2009 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Сбор информации о железе удаленных ПК | OstJoker | Скриптовые языки администрирования Windows | 9 | 21-11-2012 13:38 | |
Сбор информации о пользователях и группах. | GamblerAN | Microsoft Windows NT/2000/2003 | 5 | 30-11-2010 12:49 | |
Скрытый сбор и анализ информации о пользователях информационных ресурсов | Rostislav | Хочу все знать | 1 | 04-02-2008 16:37 | |
Сбор информации о загруженности сервера. | Zergling | Microsoft Windows NT/2000/2003 | 1 | 04-06-2007 10:36 |
|