Что нового

Парсинг значения строки из html

astati

Новичок
Сообщения
145
Репутация
4
Привет всем.! Извините но, читал читал вот эту тему и мозг сломал. :( :stars: :'(
А проблемку решить необходимо срочно.
Есть Html страница:
Код:
....
<div class="friends_field"><a href="/marcel"><b>Марсель</b></a></div>
....

требуется парсить значения между тегами <b></b>. Примерно по такому шаблону:

Код:
<div class="friends_field"><a href="/.*"><b>...</b></a></div>
Если учесть что таких тегов на странице может быть много. И надо их выводить поочередно(по моменту нахождения)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
А вы уверенны что вам именно RegExp`ы нужны?
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$file='<div class="friends_field"><a href="/marcel"><b>Марсель</b></a></div>'
$str=StringRegExp($file,'(?si)<div class="friends_field"><a href="/.*?"><b>(.*?)</b></a></div>',3)
$res=''
For $i=0 To UBound($str)-1
	$res&=$str[$i]&@CRLF
Next
MsgBox(0,'',$res)
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
Garrett - я в этом вообще не курю :smile:

sngr - все робит на ура. эт конечно не идеал. но думаю дальше разберусь. за срочность огромное спс.
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
madmasles
через:
Код:
_IEDocReadHTML

а что?
У мня робит вот такая комбинация:
Код:
$filea= _IEDocReadHTML($oIEa)
$stra=StringRegExp($filea,'(?si)<div class="friends_field"><a href="/.*?"><b>(.*?)</b></a></div>',3)
$resa=''
For $i=0 To UBound($stra)-1
    $resa&=$stra[$i]&@CRLF
 Next

а вывожу её вот так:
Код:
GUICtrlSetData($Label1x, $resa)

с учетом что
Код:
$Label1x

Это edit поле.
P.S. да и сразу вопрос, можно ли сделать чтоб выходная инфа, была не текстовая?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
astati,
ИМХО, можно так.
Код:
#include <IE.au3>
#include <Array.au3>

$sUrl = 'http://autoit-script.ru/'
$sTag = 'td'
$sClass = 'sp_recent_subject'

$oIE = _IECreate($sUrl)

$aArray = _GetTextByClassName($oIE, $sTag, $sClass, True)
If @error Then
	ConsoleWrite(@error & @LF)
Else
	_ArrayDisplay($aArray)
EndIf
$sText = _GetTextByClassName($oIE, $sTag, $sClass, 0, @CRLF & '-----------------' & @CRLF)
If @error Then
	ConsoleWrite(@error & @LF)
Else
	MsgBox(64, 'Info', $sText)
EndIf

Func _GetTextByClassName($o_Obj, $s_Tag, $s_Class, $f_Array = False, $s_Delim = @CRLF)
	Local $o_Tags, $i_Count, $a_Array[1], $s_Text

	If Not IsObj($o_Obj) Then Return SetError(-1, 0, '')

	$o_Tags = _IETagNameGetCollection($o_Obj, $s_Tag)
	If @error Then Return SetError(1, 0, '')
	If Not @extended Then Return SetError(2, 0, '')
	ReDim $a_Array[@extended + 1]
	For $o_Tag In $o_Tags
		If $o_Tag.classname == $s_Class Then
			$i_Count += 1
			$a_Array[$i_Count] = $o_Tag.innertext
			$s_Text &= $a_Array[$i_Count] & $s_Delim
		EndIf
	Next
	If Not $i_Count Then Return SetError(3, 0, '')
	ReDim $a_Array[$i_Count + 1]
	$a_Array[0] = $i_Count
	If $f_Array Then Return $a_Array
	Return StringTrimRight($s_Text, 2)
EndFunc   ;==>_GetTextByClassName
Потому и тему сюда перенес.
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
Вот это уже ближе к идеалу :D
ток пара вопросиков:
- как третий столбик заполнить? ну скажем например чтоб там кнопку сделать
- нельзя ли этоn array в edit поле засунуть?


Добавлено:
Сообщение автоматически объединено:

вообщем то темка решена поэтому ставлю статус решенной.
 
Верх