Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено]Получение переменной с HTML с помощью StringRegExpReplace (http://forum.oszone.net/showthread.php?t=145784)

ikif 21-07-2009 21:11 1173993

[решено]Получение переменной с HTML с помощью StringRegExpReplace
 
Кусок кода с которого надо выловить число:

HTML код:

      <tr>
        <td height="22" colspan="8" align="center" valign="middle"><span class="text_head3">test</span></td>
        <td align="center" valign="top" class="text_head3">518766</td>
        <td align="center" valign="top" class="text_head3">12</td>
        <td align="center" valign="top" class="text_head3">0</td>
      </tr>

Код:

       
$KodHtml=_IEDocReadHTML ( $oIE )
        $pattern="(?s).*?class=.?text_head3.?>(.*?)</td?.*"
        $Num = StringRegExpReplace($KodHtml, $pattern, "\1")
        ;$Num= Number($Num)
        ;MsgBox(0, "Good", $Num) ;for check
        If $Num>=50000 Then
                        .
                        .
                        .
        EndIf

Здравствуйте.
Пытаюсь вытащить число 12, но что то не получается с $pattern , почему то записявается вся страница.
Справку читал , но не понял (*,+,?, ...) и как избавиться от " .
Заранее благодарю.

beve 21-07-2009 21:45 1174016

Цитата:

Цитата ikif
Пытаюсь вытащить число 12 »

В приведенном куске html кода, повторяются (за исключением цифр) эти строчки:
Код:

<td align="center" valign="top" class="text_head3">518766</td>
<td
align="center" valign="top" class="text_head3">12</td>
<td
align="center" valign="top" class="text_head3">0</td>

Вопрос уточняющий, на странице еще могут встречатся подобные строки? Если нет, то постоянно ли на станице будут присуствовать все эти три строки?

Конкретно только в этом случае $pattern='(?s).*<td align="center" valign="top" class="text_head3">(\d\d)</td>.*'
Но это ненадежно... Поэтому требуется уточнение.

ikif 21-07-2009 22:32 1174057

На странице только в этом месте подобный код.
1.За счет чего , берется 12 , а не 518766 ? Из-за \d\d ?
2.То что в $pattern должно быть в ' ' или " " ?
По поводу постоянно ли присутствуют ли эти строки в коде:
Тут постоянно.
3.Как бы это выглядило , если бы не постоянно ?

ikif 21-07-2009 22:53 1174075

Как я понял /d/d - 2 цифры.
Но это не всегда так, и первое и второе могут быть разные.
И всё равно меседж показывает всю страничку.

index.htm
HTML код:

      <tr>
        <td align="center" valign="top" class="text_head3">56656</td>
        <td align="center" valign="top" class="text_head3">12</td>
        <td align="center" valign="top" class="text_head3">0</td>
      </tr>

Код:

#include <IE.au3>
#include <Array.au3>
#Include <String.au3>

$oIE = _IECreate ("C:\Documents and Settings\Opetu\Desktop\index.htm")

       
$KodHtml=_IEDocReadHTML ( $oIE )
        $pattern='(?s).*<td align="center" valign="top" class="text_head3">(\d\d)</td>.*'
        $Num = StringRegExpReplace($KodHtml, $pattern, "\1")
        ;$Num= Number($Num)
        MsgBox(0, "Good", $Num)


beve 22-07-2009 00:11 1174145

на скриншоте TD, а ты в коде пишеш td...


Думаю тут в коде, так будет работать (код в шаблоне короче делать не стал, чтобы понятна была суть):
Код:

$pattern='(?si).*class="text_head3">(?:.*)</td>.*?<td align="center" valign="top" class="text_head3">(.*)</td>.*?<td align="center" valign="top" class="text_head3">(?:.*)</td>.*'
Цитата:

Цитата ikif
2.То что в $pattern должно быть в ' ' или " " ?»

Если кавычек в $pattern нет, то могут быть любые, или '', или "". Если же есть уже слово в кавычках внутри $pattern, то весь код в $pattern обрамляется в кавычки другого вида.
Цитата:

Цитата ikif
3.Как бы это выглядило , если бы не постоянно ? »

Нужно было бы искать чтото "к чему прицепиться" в начале и в конце искомого шаблона, чтобы исключить совпадения (если же искомая строка в html коде будет уникальная (не будет повторятся), то дело намного проще.)

ikif 22-07-2009 02:09 1174227

Полное содержимое файла index.htm :
HTML код:

<html>
<head>
</head>
<body>
<table>
      <tr>
        <td align="center" valign="top" class="text_head3">56656</td>
        <td align="center" valign="top" class="text_head3">12</td>
        <td align="center" valign="top" class="text_head3">0</td>
      </tr>
</table>
</body>
</html>

Полное содержимое скрипта :
Код:

#include <IE.au3>
#include <Array.au3>
#Include <String.au3>

$oIE = _IECreate ("C:\Documents and Settings\Opetu\Desktop\index.htm")

       
$KodHtml=_IEDocReadHTML ( $oIE )
        $pattern='(?si).*class="text_head3">(?:.*)</td>.*?<td align="center" valign="top" class="text_head3">(.*)</td>.*?<td align="center" valign="top" class="text_head3">(?:.*)</td>.*'
        $Num = StringRegExpReplace($KodHtml, $pattern, "\1")
        ;$Num= Number($Num)
        MsgBox(0, "Good", $Num)

И всё равно выходит чёрт знает что. :(

В html td написано маленькими буквами

beve 22-07-2009 03:34 1174251

Цитата:

Цитата ikif
И всё равно выходит... »

Ты прав. В index.htm написан один код, а в процессе обработки, он изменяется. Поэтому могу только предложить читать этот файл так:
Код:

$file=FileOpen ("C:\Documents and Settings\Opetu\Desktop\index.htm",0)
$KodHtml=FileRead($file)
FileClose($file)


$pattern='(?s).*class="text_head3">(?:.*)</td>.*?<td align="center" valign="top" class="text_head3">(.*)</td>.*?<td align="center" valign="top" class="text_head3">(?:.*)</td>.*'
$Num =
StringRegExpReplace($KodHtml, $pattern, "\1")
   
MsgBox(0, "Good", $Num)


ikif 22-07-2009 07:36 1174281

Для эксперементов сохранил эту страничку на Десктоп, а так она должна открываться в интернете.
$oIE = _IECreate ("C:\Documents and Settings\Opetu\Desktop\index.htm", 0)
Нужного результата не принесло. :)

ikif 22-07-2009 10:15 1174393

Проблему решил, построив фильтр исходя из написаного в сообщении:


Интересно что center меняется на middle.


Время: 23:49.

Время: 23:49.
© OSzone.net 2001-