Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Сбор информации с сайта и ее обработка.

Ответить
Настройки темы
[решено] Сбор информации с сайта и ее обработка.

Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить PM | Цитировать


Собственно хочу добавить в программу сбор информации о ЛЮБОМ фильме с портала Кинопоиск, да еще и так что бы работало все время правильно. Вот список для сбора.
Код: Выделить весь код
 <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 class="type">время</td><td>118 мин.</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>
Жирным и подчеркнутым отмечено то что нужно вырвать

Я набросал кое что. Но не думаю что у меня правильно получилось (Честно говоря мне с трудом даются SringRegExpReplase и др.)
Код: Выделить весь код
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
Запнулся(и упал + сломал думалку) на жанре т.к. их там несколько и не смог вырвать...

-------

AutoIT Русское сообщество| Моя лаборатория


Отправлено: 13:17, 18-08-2009

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
$Sourse = _INetGetSource ($URL)
А где ссылка?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 15:17, 18-08-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить PM | Цитировать


Извиняюсь..
Код: Выделить весь код
http://www.kinopoisk.ru/level/1/film/397496/
Вот ссылка

-------

AutoIT Русское сообщество| Моя лаборатория


Отправлено: 15:31, 18-08-2009 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Medic84, На будущее, всегда выкладывай рабочий пример, в твоём коде также нехватает инклюда Inet.au3.

Цитата Medic84:
Вот ссылка »
По этой ссылке нужно делать запрос, там так просто через исходник не получить нужную страничку.


P.S
А в чём смысл замены пробела на пробел?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:04, 18-08-2009 | #4


Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
P.S
А в чём смысл замены пробела на пробел? »
Да это форум обрабатывает Html код там написанный. Там по идее & nbsp; Только без пробела

Цитата Creat0R:
По этой ссылке нужно делать запрос, там так просто через исходник не получить нужную страничку. »
Всмысле? Что за запрос?
Цитата Creat0R:
На будущее, всегда выкладывай рабочий пример, в твоём коде также нехватает инклюда Inet.au3. »
Хорошо

-------

AutoIT Русское сообщество| Моя лаборатория


Отправлено: 16:11, 18-08-2009 | #5


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Medic84:
Всмысле? Что за запрос? »
Ну а как ты получаешь исходник того, что видишь в браузере? Попробуй сохранить $Source в файл «test.html» и запустить его, у меня лично страница с запросом поиска не получается...

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:20, 18-08-2009 | #6


Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить PM | Цитировать


В опере нажимаю "Исходный код".
Думаешь через IE нужно страницу сохранять?

З.Ы.
А ты пробовал слеш убирать?

-------

AutoIT Русское сообщество| Моя лаборатория


Отправлено: 16:27, 18-08-2009 | #7


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить 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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:34, 18-08-2009 | #8


Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить PM | Цитировать


Если бы можно было оценку поставить поставил бы 10 баллов!

-------

AutoIT Русское сообщество| Моя лаборатория


Отправлено: 18:01, 18-08-2009 | #9


Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить 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
З.Ы. А что делать если несколько режисеров?

-------

AutoIT Русское сообщество| Моя лаборатория


Отправлено: 20:53, 18-08-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Сбор информации с сайта и ее обработка.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Сбор информации о железе удаленных ПК 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




 
Переход