Автор Тема: Как собрать в массив текст между тегами?  (Прочитано 399 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн tar [?]

  • Новичок
  • *
  • Сообщений: 52
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.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">&nbsp;</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">&nbsp;</td>
<td class="alt1 birthday">&nbsp;</td>
<td class="alt2 age"></td>


</tr> <tr>
<td class="alt1 username"><a href="members/306065-vovasikua" class="username">vovasikua</a> <span class="usertitle">&nbsp;</span></td>


<td class="alt2 homepage">&nbsp;</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">&nbsp;</td>
<td class="alt2 profilepic">&nbsp;</td>
<td class="alt1 birthday">&nbsp;</td>
<td class="alt2 age"></td>


</tr> <tr>
<td class="alt1 username"><a href="members/306064-dmitro345" class="username">Дмитро345</a> <span class="usertitle">&nbsp;</span></td>


<td class="alt2 homepage">&nbsp;</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">&nbsp;</td>
<td class="alt2 profilepic">&nbsp;</td>
<td class="alt1 birthday">&nbsp;</td>
<td class="alt2 age"></td>
Нужно вытащить  Loxness, vovasikua, Дмитро345.
Наверное нужно использовать _StringBetween
но так получится  один вытащть Loxness
Код: AutoIt [Выделить]
$aBetween = _StringBetween($sHtml, '<a href="members/306062-loxness" class="username">', '</a>')

как все вытащить?
« Последнее редактирование: Январь 13, 2019, 02:44:13 от tar »

Русское сообщество AutoIt

Как собрать в массив текст между тегами?
« Отправлен: Январь 13, 2019, 02:10:30 »

Оффлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 923
  • Репутация: 371
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Как собрать в массив текст между тегами?
« Ответ #1, Отправлен: Январь 13, 2019, 07:30:02 »
Код: AutoIt [Выделить]
#include 'array.au3'
$file=ClipGet()
$str=StringRegExp($file,'"username">([^<]*)',3)
_ArrayDisplay($str)


Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4097
  • Репутация: 1084
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Как собрать в массив текст между тегами?
« Ответ #2, Отправлен: Январь 13, 2019, 11:33:32 »
Код: AutoIt [Выделить]
$aBetween = _StringBetween($sHtml, '"username">', '</a>')


Русское сообщество AutoIt

Re: Как собрать в массив текст между тегами?
« Ответ #2 Отправлен: Январь 13, 2019, 11:33:32 »

Оффлайн tar [?]

  • Новичок
  • *
  • Сообщений: 52

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Как собрать в массив текст между тегами?
« Ответ #3, Отправлен: Январь 13, 2019, 20:44:50 »
Спасибо.
В первом варианте, ничего не выводит
Код: AutoIt [Выделить]
#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
Код: AutoIt [Выделить]
#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 Гуру
  • *****
  • Сообщений: 947
  • Репутация: 173
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Как собрать в массив текст между тегами?
« Ответ #4, Отправлен: Январь 13, 2019, 22:00:02 »
Цитировать
что не так?
Потому что в тексте документа " $sHtml" нет строк с '"username">' - там строка иного вида, например :
"<td class="alt1 username"><a class="username" href="members/306096-assettraders23">assettraders23</a> <span class="usertitle">&nbsp;</span></td>"Я не силён в регулярных выражениях, уверен, что можно сделать гораздо изящней , но всё-же вот мой вариант :
Код: AutoIt [Выделить]
#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)
 

« Последнее редактирование: Январь 13, 2019, 22:24:59 от ra4o »

Русское сообщество AutoIt

Re: Как собрать в массив текст между тегами?
« Ответ #4 Отправлен: Январь 13, 2019, 22:00:02 »

Оффлайн tar [?]

  • Новичок
  • *
  • Сообщений: 52

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Как собрать в массив текст между тегами?
« Ответ #5, Отправлен: Январь 13, 2019, 23:31:51 »
ra4o
Спасибо.
Сохраняю массив в файл, как не записывать первую строку "50"?
50
trendos
yemi
Evgeniy Forex
Косинус
Юляшик
Код: AutoIt [Выделить]
$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)


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Как собрать в массив текст между тегами?
« Ответ #6, Отправлен: Январь 14, 2019, 00:04:03 »
tar  [?]
Цитировать
как не записывать первую строку "50"?

Код: AutoIt [Выделить]
For $i = 2 To $asTemplate[0]
    FileWriteLine($hDest, $sElement & @CRLF)
Next



Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 947
  • Репутация: 173
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Как собрать в массив текст между тегами?
« Ответ #7, Отправлен: Январь 14, 2019, 00:26:12 »
Как по мне - так проще :
Код: AutoIt [Выделить]
#include <array.au3>
#include <file.au3>
;...............................
$asTemplate = _ArrayUnique($aBetween)
$hDest = FileOpen($sFileOk, 2)
If $hDest = -1 Then Exit
_FileWriteFromArray($hDest,$asTemplate,1)
FileClose($hDest)

« Последнее редактирование: Январь 14, 2019, 00:51:21 от ra4o »

Русское сообщество AutoIt

Re: Как собрать в массив текст между тегами?
« Ответ #7 Отправлен: Январь 14, 2019, 00:26:12 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
32 Ответов
21942 Просмотров
Последний ответ Апрель 07, 2011, 21:49:40
от Yashied
2 Ответов
4536 Просмотров
Последний ответ Июнь 24, 2013, 17:05:53
от Sky-WaLkeR
10 Ответов
3612 Просмотров
Последний ответ Октябрь 22, 2014, 00:07:05
от Garrett
0 Ответов
961 Просмотров
Последний ответ Октябрь 20, 2014, 17:12:58
от madmasles
5 Ответов
1600 Просмотров
Последний ответ Февраль 01, 2015, 17:35:25
от Garrett
2 Ответов
2102 Просмотров
Последний ответ Февраль 02, 2015, 18:25:04
от edyapd
0 Ответов
949 Просмотров
Последний ответ Июль 18, 2015, 16:51:12
от madmasles
2 Ответов
1648 Просмотров
Последний ответ Апрель 29, 2019, 23:58:48
от CreatoR
0 Ответов
749 Просмотров
Последний ответ Апрель 15, 2019, 13:38:08
от paa13
0 Ответов
381 Просмотров
Последний ответ Апрель 29, 2019, 23:59:37
от CreatoR