Всем привет! Прошу помощи. Необходимо выдернуть из html страницы некоторые значения и записать из в определенные ячейки. В данном примере выдернуть надо значение этажа (21) и площадь окса (38,9) Фрагмент html кода:
Следствие из третьего закона Чизхолма: "Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
Специально вроде сделал с запасом - 200 символов. Ориентировался именно на структуру. Суть формулы: поиск ключа (Этаж, площадь), взятие 200 символов правее, поиск в оставшемся первых <b> и </b> и перевод в число того, что между ними. Единственная тонкость, которая еще может быть - это десятичный разделитель (в разных настройках по-разному. У меня - запятая) Ладно. Чтобы не привязываться к 200 символов, можно оставлять все правее. Так точно не потеряем. А на структуру, как я объяснил и было рассчитано! Условность прежняя. Для этажа:
Или у Вас именно по условию код VBA нужен? Тогда дело другое...
Следствие из третьего закона Чизхолма: "Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
а если они еще одну таблицу добавят, нужные данные в массиве сместятся на позицию... можно же искать конкретный фрагмент, например по ключу "Этаж" и разбирать именно его, а не всю страницу?
PerfectVam,дело в том, что формулой здесь получается нестабильно...площадь может быть значением дробным, получим усечение....между тегами <tr> может быть больше пробелов и т.д...хочется более изящное решение. Со скриптом работать удобнее. Тем не менее спасибо за отклик!
Public Function ParseHTML(S)
ReDim X(1) As Double
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Global = True
RegExp.IgnoreCase = True
RegExp.Pattern = "<tr>([\r\n\s]+)<td[^>]*>([\r\n\s]+)" & _
"<nobr>(Этаж\:|([\r\n\s]+)Площадь ОКС'a\:([\r\n\s]+))" & _
"</nobr>([\r\n\s]+)</td>([\r\n\s]+)<td[^>]*>([\r\n\s]+)" & _
"<b>([0-9\.,]+)</b>([\r\n\s]+)</td>([\r\n\s]+)</tr>"
Set oMatches = RegExp.Execute(S)
For n = 0 To oMatches.Count - 1
If InStr(1, oMatches(n).subMatches(2), "Этаж", vbTextCompare) > 0 Then
X(0) = Val(Replace(oMatches(n).subMatches(8), ",", "."))
Else
X(1) = Val(Replace(oMatches(n).subMatches(8), ",", "."))
End If
Next
' X(0) Этаж
' X(1) Площадь ОКС
ParseHTML = X
End Function
Здравствуйте, А зачем парсить html? Открываете карту Росреестра, нажимаете ручками на нужный ОКС при открытом инспекторе. На вкладке сеть ждем прогрузки json файла. Берем оттуда хедеры и параметры запроса. После получения ответа от сервера в xmlhttp запросе загоняем этот самый ответ с помощью внешней библиотеки в словарь/коллекцию словарей/коллекций (не помню, какая там структура сейчас). Библиотеку по конвертации в json можно найти на гитхабе. Я сам сделал подобную штуку, только для ЗУ. Если интересно могу дать код.