PDA

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


ikif
21-07-2009, 21:11
Кусок кода с которого надо выловить число:


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

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

index.htm

<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)

http://img212.imageshack.us/img212/2197/44092200.jpg

beve
22-07-2009, 00:11
на скриншоте 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>.*'
2.То что в $pattern должно быть в ' ' или " " ?»
Если кавычек в $pattern нет, то могут быть любые, или '', или "". Если же есть уже слово в кавычках внутри $pattern, то весь код в $pattern обрамляется в кавычки другого вида.3.Как бы это выглядило , если бы не постоянно ? » Нужно было бы искать чтото "к чему прицепиться" в начале и в конце искомого шаблона, чтобы исключить совпадения (если же искомая строка в html коде будет уникальная (не будет повторятся), то дело намного проще.)

ikif
22-07-2009, 02:09
Полное содержимое файла index.htm :

<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)


И всё равно выходит чёрт знает что. :(
http://pic.ipicture.ru/uploads/090722/GUq1OKV5sS.jpg
В html td написано маленькими буквами

beve
22-07-2009, 03:34
И всё равно выходит... »
Ты прав. В 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
Для эксперементов сохранил эту страничку на Десктоп, а так она должна открываться в интернете.
$oIE = _IECreate ("C:\Documents and Settings\Opetu\Desktop\index.htm", 0)
Нужного результата не принесло. :)

ikif
22-07-2009, 10:15
Проблему решил, построив фильтр исходя из написаного в сообщении:

http://pic.ipicture.ru/uploads/090722/GUq1OKV5sS.jpg
Интересно что center меняется на middle.




© OSzone.net 2001-2012