|
Компьютерный форум 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 | Цитировать Medic84,
Вот подправил: #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, 'страна') $sWorld_Primier = _GetSourceProperty($sSource, 'премьера (мир)') $sRF_Primier = _GetSourceProperty($sSource, 'премьера (РФ)') $sOriginal = _GetSourceProperty($sSource, '', '(?si).*?<span style="color:.*? font-size:.*?">(.*?)</span>.*') $sDirector = _GetSourceProperty($sSource, 'режиссер') $sWorld_Collect = _GetSourceProperty($sSource, 'сборы в мире') $sTime = _GetSourceProperty($sSource, 'время') $Kratk = _GetSourceProperty($sSource, '', '(?si).*?<span class=_reachbanner_.*?>(.*?)</span>.*') $sJaners = _GetSourceProperty($sSource, 'жанр') $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" & _ "Жанр:\t\t\t%s", _ $sName, $sSlogan, $sBudget, $sYear, $sCountry, $sDirector, $sWorld_Primier, $sWorld_Collect, $sRF_Primier, $sTime, $sJaners) MsgBox(64, 'Kinopoisk.ru Info', $sInfo) ;Функция для получения подстроки по заданному pattern Func _GetSourceProperty($sSource, $sName, $sPattern = '') Local $s_Pattern = _ '(?si).*?<TD class=type>%s</TD>.*?<TD(?: class=.*?|)>' & _ '(?:<A(?: class=.*?|) href=".*?">|)(.*?)(?:</A>|)</TD></TR>.*' If $sPattern <> '' Then $s_Pattern = $sPattern $s_Pattern = StringFormat($s_Pattern, "\Q" & $sName & "\E") Local $sRet = StringRegExpReplace($sSource, $s_Pattern, '\1') If @extended = 0 Then Return SetError(1, 0, "N/A") $sRet = _ContentReplaceTags($sRet, 2) $sRet = StringRegExpReplace($sRet, '«+|»+', '"') Return $sRet EndFunc Func _ContentReplaceTags($sString, $iCorrect=-1) Local $aCorrects_Arr[8][2] = [[7], _ ['&qu' & 'ot;', '"'], ['&a' & 'mp;', '&'], ['&' & '#39;', "'"], _ ['&ap' & 'os;', "'"], ['&g' & 't;', '>'], ['&l' & 't;', '<'], ['&nb' & 'sp;', ' ']] Local $sReplStr = '\\n' If $iCorrect = 2 Then $sReplStr = @CRLF Local $sRet_Content = StringRegExpReplace($sString, '(?i)<(/|)br(/| /|)>|\n|\r|\r\n', $sReplStr) $sRet_Content = StringRegExpReplace($sRet_Content, '(?si)<(/|)[abiu]( .*?|)>|<hr(/| /|)>', '') For $i = 1 To $aCorrects_Arr[0][0] $sRet_Content = StringReplace($sRet_Content, $aCorrects_Arr[$i][0], $aCorrects_Arr[$i][1]) Next If $iCorrect = 1 Then Return $sRet_Content Local $iCheckSpanPos = StringInStr($sRet_Content, '</s>') If $iCheckSpanPos > 0 Then $sRet_Content = StringTrimLeft($sRet_Content, $iCheckSpanPos) Return $sRet_Content EndFunc Кстати, кроме «& nbsp;» ещё могут встречаться и другие теги(?), у меня где то была функция для их полной замены... |
------- Последний раз редактировалось Creat0R, 19-08-2009 в 01:56. Причина: Подправил пример Отправлено: 23:17, 18-08-2009 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Creat0R:
Func _ContentReplaceTags($sString, $iCorrect=-1) Local $aCorrects_Arr[8][2] = [[7], _ ['&qu' & 'ot;', '"'], ['&a' & 'mp;', '&'], ['&' & '#39;', "'"], _ ['&ap' & 'os;', "'"], ['&g' & 't;', '>'], ['&l' & 't;', '<'], ['&nb' & 'sp;', ' ']] Local $sReplStr = '\\n' If $iCorrect = 2 Then $sReplStr = @CRLF Local $sRet_Content = StringRegExpReplace($sString, '(?i)<(/|)br(/| /|)>|\n|\r|\r\n', $sReplStr) $sRet_Content = StringRegExpReplace($sRet_Content, '(?si)<(/|)[abiu]( .*?|)>|<hr(/| /|)>', '') For $i = 1 To $aCorrects_Arr[0][0] $sRet_Content = StringReplace($sRet_Content, $aCorrects_Arr[$i][0], $aCorrects_Arr[$i][1]) Next If $iCorrect = 1 Then Return $sRet_Content Local $iCheckSpanPos = StringInStr($sRet_Content, '</s>') If $iCheckSpanPos > 0 Then $sRet_Content = StringTrimLeft($sRet_Content, $iCheckSpanPos) Return $sRet_Content EndFunc |
|
------- Последний раз редактировалось Creat0R, 19-08-2009 в 01:56. Отправлено: 01:44, 19-08-2009 | #12 |
$AutoITer Сообщения: 446
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
Имя фильма поправил на Так как не определялось. Осталось самое сложное. И я отстану))) 1. Рейтинг фильма. IDMB я вставил сам, а вот с обычным рейтингом незадача. <div style="color: #f60; font-family: tahoma; font-size: 25px"><a href="/level/83/film/392930/" class="continue" style="background: url(/images/dot_or.gif) 0 93% repeat-x; font-weight: normal !important; text-decoration: none">7.952<span style="font:100 14px tahoma, verdana"> 10591</span></a> У меня есть Элемент List Хочу добавить актеров с помощью _GUICtrlListBox_AddString($roles_List, "Актер") <tr><td style="height: 31px; text-align: right; border: none; padding-right: 10px"><span style="color: #f60">В главных ролях:</span></td></tr> <tr><td style="height: 10px"><br /></td></tr> <tr><td style="height: 100%; vertical-align: top; padding-right:10px"> <table style="width: 100%; border: none" cellspacing=0 cellpadding=0> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/6464/" class="all">Джон Легуизамо</a></td></tr> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/25385/" class="all">Куин Латифа</a></td></tr> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/4092/" class="all">Денис Лири</a></td></tr> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/41961/" class="all">Саймон Пегг</a></td></tr> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/15869/" class="all">Джош Пек</a></td></tr> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/35310/" class="all">Рэй Романо</a></td></tr> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/297/" class="all">Шонн Уильям Скотт</a></td></tr> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/1235771/" class="all">Карен Дишер</a></td></tr> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/39391/" class="all">Крис Уэдж</a></td></tr> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/687150/" class="all">Юнис Чо</a></td></tr> <tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/19/film/392930/" class="all">...</a></td></tr> |
|
------- Последний раз редактировалось Medic84, 19-08-2009 в 09:49. Отправлено: 09:23, 19-08-2009 | #13 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Medic84:
Цитата Medic84:
![]() Цитата Medic84:
#include <IE.au3> $sURL = "http://www.kinopoisk.ru/level/1/film/89515" $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>.*') $sOrigin_Name = _GetSourceProperty($sSource, '', '(?si).*?<span style="color:.*? font-size:.*?">(.*?)</span>.*') $sSlogan = _GetSourceProperty($sSource, 'слоган') $sBudget = _GetSourceProperty($sSource, 'бюджет') $sYear = _GetSourceProperty($sSource, 'год') $sCountry = _GetSourceProperty($sSource, 'страна') $sWorld_Primier = _GetSourceProperty($sSource, 'премьера (мир)') $sRF_Primier = _GetSourceProperty($sSource, 'премьера (РФ)') $sDirector = _GetSourceProperty($sSource, 'режиссер') $sWorld_Collect = _GetSourceProperty($sSource, 'сборы в мире') $sTime = _GetSourceProperty($sSource, 'время') $sJaners = _GetSourceProperty($sSource, 'жанр') $sRaiting = _GetSourceProperty($sSource, '', '(?si).*?<A class=continue style=".*?" href=".*?">(.*?)<SPAN.*?>.*?</SPAN></A>.*') $sIMDB_Raiting = _GetSourceProperty($sSource, '', '(?si).*?<DIV style=".*?">IMDB: (.*?)</DIV>.*') $sDescription = _GetSourceProperty($sSource, '', '(?si).*?<span class=_reachbanner_.*?>(.*?)</span>.*') $sActors = _GetSourceProperty($sSource, '', '(?si).*?В главных ролях:.*?<A class=all href=".*?">(.*?)\.\.\.</A></TD></TR>.*') $sActors = StringRegExpReplace($sActors, '(\n\r)+|\A\s+|\s+$', '') $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\t%s\n" & _ "Режиссер:\t\t%s\n" & _ "Премьера (Мир):\t\t%s\n" & _ "Сборы в мире:\t\t%s\n" & _ "Премьера (РФ):\t\t%s\n" & _ "Время:\t\t\t%s\n" & _ "Жанр:\t\t\t%s\n" & _ "Рейтинг:\t\t\t%s\n" & _ "Рейтинг IMDB:\t\t%s\n\n" & _ "[В главных ролях]:\n%s\n\n" & _ "[Описание]:\n%s\n\n", _ $sName, $sOrigin_Name, $sSlogan, $sBudget, $sYear, $sCountry, $sDirector, $sWorld_Primier, _ $sWorld_Collect, $sRF_Primier, $sTime, $sJaners, $sRaiting, $sIMDB_Raiting, $sActors, $sDescription) MsgBox(64, 'Kinopoisk.ru Info', $sInfo) ;Функция для получения подстроки по заданному pattern Func _GetSourceProperty($sSource, $sName, $sPattern = '', $iGetArr=0) Local $s_Pattern = _ '(?si).*?<TD class=type>%s</TD>.*?<TD(?: class=.*?|)>' & _ '(?:<A(?: class=.*?|) href=".*?">|)(.*?)(?:</A>|)</TD></TR>.*' If $sPattern <> '' Then $s_Pattern = $sPattern If $sName <> '' Then $s_Pattern = StringFormat($s_Pattern, "\Q" & $sName & "\E") If $iGetArr = 0 Then Local $sRet = StringRegExpReplace($sSource, $s_Pattern, '\1') If @extended = 0 Then Return SetError(1, 0, "N/A") Else Return StringRegExp($sSource, $s_Pattern, 3) EndIf $sRet = _ContentReplaceTags($sRet, 2) $sRet = StringRegExpReplace($sRet, '«+|»+', '"') Return $sRet EndFunc Func _ContentReplaceTags($sString, $iCorrect=-1) Local $aTags_Arr[8][2] = [[7], _ ['&qu' & 'ot;', '"'], ['&a' & 'mp;', '&'], ['&' & '#39;', "'"], _ ['&ap' & 'os;', "'"], ['&g' & 't;', '>'], ['&l' & 't;', '<'], ['&nb' & 'sp;', ' ']] Local $sReplStr = '\\n' If $iCorrect = 2 Then $sReplStr = @CRLF Local $sRet_Content = StringRegExpReplace($sString, '(?i)<(/|)br(/| /|)>|\n|\r|\r\n', $sReplStr) $sRet_Content = StringRegExpReplace($sRet_Content, '(?si)<(/|).*?>|<hr(/| /|)>', '') ;$sRet_Content = StringRegExpReplace($sRet_Content, '(?si)<(/|)[abiu]( .*?|)>|<hr(/| /|)>', '') For $i = 1 To $aTags_Arr[0][0] $sRet_Content = StringReplace($sRet_Content, $aTags_Arr[$i][0], $aTags_Arr[$i][1]) Next If $iCorrect = 1 Then Return $sRet_Content Local $iCheckSpanPos = StringInStr($sRet_Content, '</s>') If $iCheckSpanPos > 0 Then $sRet_Content = StringTrimLeft($sRet_Content, $iCheckSpanPos) Return $sRet_Content EndFunc |
|||
------- Отправлено: 16:12, 19-08-2009 | #14 |
$AutoITer Сообщения: 446
|
Профиль | Отправить PM | Цитировать ;$sRet_Content = StringRegExpReplace($sRet_Content, '(?si)<(/|)[abiu]( .*?|)>|<hr(/| /|)>', '') И что то рейтинг не работает ![]() И актеры это не массив ![]() Выдает ошибку. Вобще ерунда какая то. Программа вообще критическую ошибку выдает. И выдает отчет.... Посмотри пожалуйста если есть время. Там некоторые строчки с комментариями ![]() |
------- Последний раз редактировалось Medic84, 19-08-2009 в 18:25. Отправлено: 16:34, 19-08-2009 | #15 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Medic84:
![]() |
|
------- Последний раз редактировалось Creat0R, 22-08-2009 в 05:33. Причина: Обновление прикреплённого файла Отправлено: 00:18, 20-08-2009 | #16 |
![]() Сообщения: 3649
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Creat0R:
![]() |
|
------- Последний раз редактировалось Habetdin, 19-08-2010 в 14:56. Отправлено: 12:08, 18-08-2010 | #17 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Сбор информации о железе удаленных ПК | 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 |
|