Что нового

[Автоматизация] Чтение html кода страницы

modnik

Знающий
Сообщения
138
Репутация
13
Добрый день!

Есть страница. И в ней есть точно такие строки

Код:
<div class="item-stat">
<h3>Запросы на автопокупку (всего 6)</h3>
<table class="table-v2 table-autopurchase">
<tr>
<th>Цена</th>
<th>Запросов</th>
</tr>
<tr>
<td>[b]11.24[/b]<small></small></td> !!!!!!!!!!!!
<td>1</td>
</tr><tr>
<td>[b]10[/b]<small></small></td> !!!!!!!!!!!!
<td>1</td>
</tr><tr>
<td>[b]6.31[/b]<small></small></td>!!!!!!!!!!!!
<td>2</td>
</tr><tr>
<td>[b]2.01[/b]<small></small></td>!!!!!!!!!!!!
<td>1</td>
</tr><tr>
<td>[b]1.01[/b]<small></small> и менее</td>!!!!!!!!!!!!
<td>1</td>
</tr> </table>

Мне необходимо достать данные (выделил восклицательными знаками) и записать их в таблицу эксель. Если как записать в Эксель я представляю, то как считать данные даже не знаю как подступиться. Заранее большое спасибо
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Ну, первый способ, это регулярные выражения, но это кривой способ, по отношению к HTML, поэтому мы его пропускаем.

А вот уже нормальное решение, загрузить HTML страницу, получить DOM дерево и уже с ним, как с объектом работать.
Загрузить можно как через браузер (Internet Explorer к примеру)
Код:
#include <IE.au3>
Local $oIE = _IECreate("http://адрес/страницы/")

Так и вручную:
Код:
#include <IE.au3>
Local $sPage = BinaryToString(InetRead("http://адрес/страницы/"))
Local $oHTML = ObjCreate("HTMLFILE")
$oHTML.Write($sPage)

И вот теперь уже можно что-то делать с загруженной страницей...
Для начала, посмотрите функцию
Код:
_IETableWriteToArray ( )
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Спасибо большое!
Код:
$oIE = _IECreate("https://")
$oTable = _IETableGetCollection ($oIE, 1)
$aTableData = _IETableWriteToArray ($oTable, True)
_ArrayDisplay($aTableData)


Так всё работает


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

"Вопрос на засыпку":

1. Я проверил другим примером из учебника который должен вы итоге вернуть кол-во таблиц на странице и он мне показал, что на этой странице 2 таблицы
2. Однако, выполнив код, который я указывал ранее он мне вернул в массив только данные той таблицы, которая мне нужна,
3. Собственно вопрос, если таблиц много то как вернуть в массив данные определённой таблицы? Почему мне вернулось значение только одной таблицы


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

Для той страницы что мне нужна этот код работает, но вот для этих что снизу почему то нет:

Код:
$oIE = _IECreate("http://steamcommunity.com/market/listings/570/Treasure Upgrade Infuser - Winter 2016")
$oTable = _IETableGetCollection ($oIE, 1)
$aTableData = _IETableWriteToArray ($oTable, True)
_ArrayDisplay($aTableData)


и другая страница

Код:
$oIE = _IECreate("http://steamcommunity.com/market/listings/570/Frozen Emperor's Runed Bracers")
$oTable = _IETableGetCollection ($oIE, 1)
$aTableData = _IETableWriteToArray ($oTable, True)
_ArrayDisplay($aTableData)



Выдаёт ошибку:
Код:
--> IE.au3 T3.0-1 Warning from function _IETableGetCollection, $_IEStatus_NoMatch
--> IE.au3 T3.0-1 Error from function _IETableWriteToArray, $_IEStatus_InvalidDataType



Прошу помочь разобраться
 
Верх