-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
[решено]Получение переменной с 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 , почему то записявается вся страница.
Справку читал , но не понял (*,+,?, ...) и как избавиться от " .
Заранее благодарю.
|
Цитата:
Цитата 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>.*'
Но это ненадежно... Поэтому требуется уточнение.
|
На странице только в этом месте подобный код.
1.За счет чего , берется 12 , а не 518766 ? Из-за \d\d ?
2.То что в $pattern должно быть в ' ' или " " ?
По поводу постоянно ли присутствуют ли эти строки в коде:
Тут постоянно.
3.Как бы это выглядило , если бы не постоянно ?
|
Как я понял /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)

|
на скриншоте 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 коде будет уникальная (не будет повторятся), то дело намного проще.)
|
Полное содержимое файла 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 написано маленькими буквами
|
Ты прав. В 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)
|
Для эксперементов сохранил эту страничку на Десктоп, а так она должна открываться в интернете.
$oIE = _IECreate ("C:\Documents and Settings\Opetu\Desktop\index.htm", 0)
Нужного результата не принесло. :)
|
Проблему решил, построив фильтр исходя из написаного в сообщении:
Интересно что center меняется на middle.
|
Время: 23:49.
© OSzone.net 2001-