Разбирайте HTML в VBA для извлечения информации из списка описания?

Вопрос: Я хочу извлечь информацию с веб-сайта с помощью Excel XP. Я нашел пример кода ) и попробовал следующее: Function strHtmlElementValue(htmldoc As HTMLDocument, id As String) As String Dim HtmlElement As IHTMLElement Set HtmlElement = htmldoc.getElementById(id) strHtmlElementValue = id & ": " & HtmlElement.innerText End Function Я попробовал его со следующим URL (загружаемым как htmldoc):

Вопрос:

Я хочу извлечь информацию с веб-сайта с помощью Excel XP.

Я нашел пример кода ) и попробовал следующее:

Function strHtmlElementValue(htmldoc As HTMLDocument, id As String) As String Dim HtmlElement As IHTMLElement Set HtmlElement = htmldoc.getElementById(id) strHtmlElementValue = id & «: » & HtmlElement.innerText End Function

Я попробовал его со следующим URL (загружаемым как htmldoc): http://www.immobilienscout24.de/expose/73940554

Если я использую строку “expose-title” для id, функция возвращает заголовок страницы, что хорошо.

Но как я могу получить доступ к такой информации, как цена?

В коде Html это выглядит так. Нет идентификатора, и если я попытаюсь использовать имя класса “is24qa-kaufpreis” для getelementbyid, я получаю сообщение об ошибке.

<dl> <dt> <strong class=»is24qa-kaufpreis-label»> Kaufpreis: </strong> </dt> <dd class=»is24qa-kaufpreis»> 2.190.000,00 EUR </dd> </dl>

Итак, есть ли способ получить доступ к таким полям как “is24qa-kaufpreis” напрямую и зачитать внутренний текст (в данном случае 2.190.000,00 EUR?

Лучший ответ:

Есть несколько способов, которыми вы могли бы это сделать. Следующий код показывает два подхода, основанные на “getElementsByTagName”. В исходном коде для веб-страницы, если вы можете подсчитать, какой экземпляр div “dd” находится в kaufpreis, вы можете использовать первый метод. После него показан более общий подход.

Sub test() my_url = «http://www.immobilienscout24.de/expose/73940554» Set html_doc = CreateObject(«htmlfile») Set xml_obj = CreateObject(«MSXML2.XMLHTTP») xml_obj.Open «GET», my_url, False xml_obj.send html_doc.body.innerhtml = xml_obj.responseText Set xml_obj = Nothing k_pice = html_doc.body.getElementsByTagName(«dd»)(0).innertext ‘ Or Set Results = html_doc.body.getElementsByTagName(«dd») For Each itm In Results If InStr(1, itm.outerhtml, «EUR», vbTextCompare) > 0 Then k_price = itm.innertext Exit For Else End If Next End Sub Ответ №1

Это сработало для меня. IE11, но должен работать с IE9+.

Sub TestGEBCN() Dim doc As New MSHTML.HTMLDocument, html, els html = «<dl><dt><strong class=»»is24qa-kaufpreis-label»»>Kaufpreis:» & _ «</strong></dt><dd class=»»is24qa-kaufpreis»»>» & _ «2.190.000,00 EUR</dd></dl>» doc.body.innerHTML = html Set els = doc.getElementsByClassName(«is24qa-kaufpreis») Debug.Print els(0).innerText End Sub Ответ №2

использование

getElementsByTagName(«strong»)(0).InnerText

для Кауфрейса;

использование

getElementsByTagName(«dd»)(0).InnerText

за 2.190.000,00 EUR.

(0) – это номер одного и того же элемента тега, в коде может быть много записей с тем же именем тега, чтобы их использовать (“tag”) (0), (“tag”) (1),…, ( “тэг”) (п).

Я предлагаю исследовать темы, касающиеся дочерних элементов или вспомогательных элементов для целей автоматизации.

Ответ №3

Также помните, что Excel может выполнять собственные веб-запросы. В меню “Данные – импорт внешних данных” – новое меню веб-запросов (Alt + D, D, W). Тогда вы будете ссылаться на него как на лист2! A22 или что угодно. Это не хорошо для страницы, которая постоянно меняет ее макет.

Ответ №4

Селектор CSS:

.querySelector метод HTMLDocument для применения CSS-селектора dd[class=’is24qa-kaufpreis’]

Это говорит о первом элементе с именем тега dd имеющим атрибут class я s24qa-kaufpreis’. «[]» означает атрибут.

Запрос CSS:

VBA:

htmldocument.querySelector(«dd[class=’is24qa-kaufpreis’]»).innerText

Вам нужно получить объект HTMLDocument, но другие ответы уже показывают, что для этого есть мезоны.

Оцените статью
Добавить комментарий