Что нового

Как собрать в массив текст между тегами?

tar

Новичок
Сообщения
58
Репутация
0
Здравствуйте.
Есть такой код
Код:
</tr> <tr>
	<td class="alt1 username"><a href="members/306062-loxness" class="username">Loxness</a> <span class="usertitle">В начале пути</span></td>
	
	
	<td class="alt2 homepage"> </td>
	
	<td class="alt1 joindate">Вчера</td>
	<td class="alt2 postcount">4</td>
	<td class="alt1 lastvisit"><span class="date">12.01.2019</span> 
<span class="time">23:52</span></td>
	<td class="alt2 reputation"><img class="repimg" src="images/reputation/reputation_pos.png" alt="Loxness стараюсь положительно себя зарекомендовать" title="Loxness стараюсь положительно себя зарекомендовать"> </td>
	<td class="alt1 avatar"><img class="avatar" src="images/avatars/47.jpg" border="0" alt="Аватар для Loxness" hspace="0" vspace="0" title="Аватар для Loxness"></td>
	<td class="alt2 profilepic"> </td>
	<td class="alt1 birthday"> </td>
	<td class="alt2 age"></td>
	
	
</tr> <tr>
	<td class="alt1 username"><a href="members/306065-vovasikua" class="username">vovasikua</a> <span class="usertitle"> </span></td>
	
	
	<td class="alt2 homepage"> </td>
	
	<td class="alt1 joindate">Вчера</td>
	<td class="alt2 postcount">0</td>
	<td class="alt1 lastvisit"><span class="date">12.01.2019</span> 
<span class="time">23:13</span></td>
	<td class="alt2 reputation"><img class="repimg" src="images/reputation/reputation_pos.png" alt="vovasikua стараюсь положительно себя зарекомендовать" title="vovasikua стараюсь положительно себя зарекомендовать"> </td>
	<td class="alt1 avatar"> </td>
	<td class="alt2 profilepic"> </td>
	<td class="alt1 birthday"> </td>
	<td class="alt2 age"></td>
	
	
</tr> <tr>
	<td class="alt1 username"><a href="members/306064-dmitro345" class="username">Дмитро345</a> <span class="usertitle"> </span></td>
	
	
	<td class="alt2 homepage"> </td>
	
	<td class="alt1 joindate">Вчера</td>
	<td class="alt2 postcount">0</td>
	<td class="alt1 lastvisit"><span class="date">12.01.2019</span> 
<span class="time">22:46</span></td>
	<td class="alt2 reputation"><img class="repimg" src="images/reputation/reputation_pos.png" alt="Дмитро345 стараюсь положительно себя зарекомендовать" title="Дмитро345 стараюсь положительно себя зарекомендовать"> </td>
	<td class="alt1 avatar"> </td>
	<td class="alt2 profilepic"> </td>
	<td class="alt1 birthday"> </td>
	<td class="alt2 age"></td>
Нужно вытащить Loxness, vovasikua, Дмитро345.
Наверное нужно использовать _StringBetween
но так получится один вытащть Loxness
Код:
$aBetween = _StringBetween($sHtml, '<a href="members/306062-loxness" class="username">', '</a>')

как все вытащить?
 

sngr

AutoIT Гуру
Сообщения
1,011
Репутация
409
Код:
#include 'array.au3'
$file=ClipGet()
$str=StringRegExp($file,'"username">([^<]*)',3)
_ArrayDisplay($str)
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
Код:
$aBetween = _StringBetween($sHtml, '"username">', '</a>')
 
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
Спасибо.
В первом варианте, ничего не выводит
Код:
#include <String.au3>
#include <IE.au3>
#include 'array.au3'
$sUrl="https://forexdengi.com/memberlist.php?s=&securitytoken=1547328384-01139ad282bbc04c7658c02488a84ced16e320b3&do=getall&ausername=&homepage=&field5=0&field1=&field3=&field4=&field8=&icq=&aim=&msn=&yahoo=&skype=&postslower=&postsupper=&joindateafter=2019-01-12&joindatebefore=&lastpostafter=&lastpostbefore=&sort=lastvisit&order=DESC"
$oIE = _IECreate($sUrl)
$sText = _IEBodyReadText($oIE)
$str=StringRegExp($sText,'"username">([^<]*)',3)
_ArrayDisplay($str)


ВО втором пишет ошибку
Код:
"C:\Users\Administrator\Documents\otvetya\poisk_usera 2.au3" (13) : ==> Subscript used on non-accessible variable.:
MsgBox(0, 'txt1', $aBetween[0])
MsgBox(0, 'txt1', $aBetween^ ERROR
Код:
#include <String.au3>
#include <IE.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
Global $oIE, $sHtml = '', $aBetween, $aRegExp
$sUrl="https://forexdengi.com/memberlist.php?s=&securitytoken=1547328384-01139ad282bbc04c7658c02488a84ced16e320b3&do=getall&ausername=&homepage=&field5=0&field1=&field3=&field4=&field8=&icq=&aim=&msn=&yahoo=&skype=&postslower=&postsupper=&joindateafter=2019-01-12&joindatebefore=&lastpostafter=&lastpostbefore=&sort=lastvisit&order=DESC"
$oIE = _IECreate($sUrl)
 $sHtml = _IEDocReadHTML($oIE)
 ;$sHtml = _IEBodyReadText($oIE)
 Sleep(300)
 $aBetween = _StringBetween($sHtml, '"username">', '</a>')
    MsgBox(0, 'txt1', $aBetween[0])

что не так?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Потому что в тексте документа " $sHtml" нет строк с '"username">' - там строка иного вида, например :
Код:
"<td class="alt1 username"><a class="username" href="members/306096-assettraders23">assettraders23</a> <span class="usertitle"> </span></td>"
Я не силён в регулярных выражениях, уверен, что можно сделать гораздо изящней , но всё-же вот мой вариант :
Код:
#include <String.au3>
#include <IE.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
Global $oIE, $sHtml = '', $aBetween, $aRegExp
$sUrl = "https://forexdengi.com/memberlist.php?s=&securitytoken=1547328384-01139ad282bbc04c7658c02488a84ced16e320b3&do=getall&ausername=&homepage=&field5=0&field1=&field3=&field4=&field8=&icq=&aim=&msn=&yahoo=&skype=&postslower=&postsupper=&joindateafter=2019-01-12&joindatebefore=&lastpostafter=&lastpostbefore=&sort=lastvisit&order=DESC"
$oIE = _IECreate($sUrl)
$sHtml = _IEDocReadHTML($oIE)
;$sHtml = _IEBodyReadText($oIE)
Sleep(300)
$aBetween = StringRegExp($sHtml, '(?:"members/[0-9a-zA-Z_-]*">)(.*)(?:</a>)', 3)
_ArrayDisplay($aBetween)
 
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
ra4o
Спасибо.
Сохраняю массив в файл, как не записывать первую строку "50"?
Код:
50
trendos
yemi
Evgeniy Forex
Косинус
Юляшик
Код:
$aBetween = StringRegExp($sHtml, '(?:"members/[0-9a-zA-Z_-]*">)(.*)(?:</a>)', 3)
$asTemplate = _ArrayUnique($aBetween)

If @error Then Exit

$hDest = FileOpen($sFileOk, 2)
If $hDest = -1 Then Exit

For $sElement In $asTemplate
    FileWriteLine($hDest, $sElement & @CRLF)
Next
FileClose($hDest)
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Как по мне - так проще :
Код:
#include <array.au3>
#include <file.au3>
;...............................
$asTemplate = _ArrayUnique($aBetween)
$hDest = FileOpen($sFileOk, 2)
If $hDest = -1 Then Exit
_FileWriteFromArray($hDest,$asTemplate,1)
FileClose($hDest)
 
Верх