mail mail

Скачивание (загрузка) текста web-страницы в текстовый файл

При помощи этого макроса вы можете скачать текст с выбранной страницы веб-сайта:

Sub ЗагрузкаТекстаВебСтраницы()
    Set IE = CreateObject("InternetExplorer.Application"):    ' загружаем браузер Internet Explorer
   On Error Resume Next
    addr$ = "http://excelvba.ru/services"    ' указываем адрес сайта (веб-страницы), текст которой загружаем

    IE.Navigate addr$    ' загружаем сайт
    While IE.busy Or (IE.readyState <> 4): DoEvents: Wend    ' ждем, пока загрузится страница
   ' Set ieDoc = IE.Document    ' ссылка на открытый документ

    txt$ = IE.Document.body.innerText    ' считываем текст веб-страницы в текстовую переменную
   
    '[a1] = txt$ ' помещаем текст веб-страницы на лист Excel
   IE.Quit: Set IE = Nothing    ' закрываем браузер
   
    MsgBox txt$, vbInformation, "Текст веб-страницы " & addr$ ' выводим сообщение с текстом с сайта
End Sub

То же самое - но в виде функции:

Function WebPageText(ByVal sURL As String) As String
    On Error Resume Next
    Set IE = CreateObject("InternetExplorer.Application"):    ' загружаем браузер Internet Explorer
   IE.Navigate sURL    ' загружаем сайт
   While IE.busy Or (IE.readyState <> 4): DoEvents: Wend    ' ждем, пока загрузится страница
   WebPageText = IE.Document.body.innerText    ' считываем текст веб-страницы
   IE.Quit: Set IE = Nothing    ' закрываем браузер
End Function

Пример использования этой функции для загрузки текста страниц из интернета:

Sub ПримерИспользованияФункции_WebPageText()
    ' считываем текст страницы <a href="http://excelvba.ru/services" title="http://excelvba.ru/services">http://excelvba.ru/services</a> в переменную txt
   txt = WebPageText("http://excelvba.ru/services")
    ' получаем путь к папке "Рабочий стол"
   ПутьКРабочемуСтолу = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    ' сохраняем текст из переменной txt в файл PageText.txt на рабочем столе
   SaveTXTfile ПутьКРабочемуСтолу & "\PageText.txt", txt
    ' открываем созданный текстовый файл в Excel
   Workbooks.OpenText ПутьКРабочемуСтолу & "\PageText.txt", , , xlDelimited
End Sub

Function SaveTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
    On Error Resume Next: Err.Clear
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.CreateTextFile(filename, True)
    ts.Write txt: ts.Close
    SaveTXTfile = Err = 0
    Set ts = Nothing: Set fso = Nothing
End Function

PS: Если вас интересует ИСХОДНЫЙ КОД страницы - используйте эту функцию: http://excelvba.ru/code/GetHTTPResponse

ВложениеРазмер
WebPageText.xls26 КБ

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Спасибо Вам за ответ!
Видимо у меня что-то с настройками? Посмотрю.
Я делал аналогично - загнал в переменную адрес. Результатом было ''.

Огромное спасибо за совет, поискать по форуму "Планеты" - с лёту в поисковиках не нашел. Надо было быстро получить координаты. Сначала хотел воспользоваться json, но не смог добраться даже да текста. Надеюсь, на форуме найду.

Еще раз благодарю за очень оперативный ответ!

Здравствуйте, Антон.

Я взял вышеопубликованную функцию ЗагрузкаТекстаВебСтраницы,
в одной строке кода заменил адрес сайта:

' указываем адрес сайта (веб-страницы), текст которой загружаем
addr$ = "http://maps.google.com/maps/api/geocode/xml?address=London&sensor=false"

И увидел сообщение с ожидаемым результатом.
Так что не знаю, в чем проблема, - у меня всё работает.

PS: Я бы на вашем месте поискал готовое решение - на форуме «Планеты Excel» встречал как-то 2 решения вашей задачи
(определение координат по адресу, путем парсинга XML с подобный веб-страниц)

Здравствуйте!

Спасибо за Ваш отличный сайт!

Я попытался воспользоваться кодом с этого примера.
Планировал прочитать текст со странички по адресу "http://maps.google.com/maps/api/geocode/xml?address=London&sensor=false"

Но в переменную от объект WebPageText = IE.Document.body.innerText ничего не записывается. Подскажите, в чем может быть проблема?
Если открывать линк в IE, то результат отображается.

Спасибо!

Спасибо.. Link.innerText - это то что нужно..А я в справке это свойство не нашёл.. Ещё раз спасибо..

Судя по результату, link.nameProp возвращает не надпись на ссылке, а что-то другое:
(я плохо ориентируюсь в объектной модели DOM)

Debug.Print "Ссылка №" & n, Link.href, Link.nameProp

Результат:

Ссылка №96 http://excelvba.ru/category/pivot pivot
Ссылка №97 http://excelvba.ru/category/Windows Windows
Ссылка №98 http://excelvba.ru/category/archive archive
Ссылка №99 http://excelvba.ru/category/WMI WMI
Ссылка №100 http://excelvba.ru/category/registry registry
Ссылка №101 http://excelvba.ru/category/WinAPI WinAPI
Ссылка №102 http://excelvba.ru/category/mail mail
Ссылка №103 http://excelvba.ru/category/business business
Ссылка №104 http://excelvba.ru/category/price price
Ссылка №105 http://excelvba.ru/category/finance finance
Ссылка №106 http://excelvba.ru/category/autoparts autoparts
Ссылка №107 http://excelvba.ru/category/billing billing
Ссылка №108 http://excelvba.ru/category/realty realty


Насколько мне известно, для получение текста ссылки надо использовать свойство Link.innerText

Debug.Print "Ссылка №" & n, Link.href, Link.innerText

Результат:

Ссылка №123 http://excelvba.ru/category/hyperlinks Гиперссылки (15)
Ссылка №124 http://excelvba.ru/category/password Логин и пароль (12)
Ссылка №125 http://excelvba.ru/category/sound Звук и видео (1)
Ссылка №126 http://excelvba.ru/category/calendar Календарь (дата, время) (6)
Ссылка №127 http://excelvba.ru/category/pictures Изображения (картинки) (13)
Ссылка №128 http://excelvba.ru/category/class Модули класса (13)
Ссылка №129 http://excelvba.ru/category/toolbar Панель инструментов (16)
Ссылка №130 http://excelvba.ru/category/popup Контекстное меню (4)
Ссылка №131 http://excelvba.ru/category/array Массивы (9)
Ссылка №132 http://excelvba.ru/category/VBE Проект VBA (1)
Ссылка №133 http://excelvba.ru/category/encode Перевод и кодировка (4)
Ссылка №134 http://excelvba.ru/category/sort Сортировка (1)
Ссылка №135 http://excelvba.ru/category/string текстовые строки (4)
Ссылка №136 http://excelvba.ru/category/userform Форма ввода (19)
Ссылка №137 http://excelvba.ru/category/CheckInput Проверка ввода (7)
Ссылка №138 http://excelvba.ru/programmes/1 Простые макросы

Спасибо..Всё получается.
А надпись на этой ссылке можно получить свойством link.nameProp ??
Спасибо за ответ..

Пример кода получения списка ссылок можете найти в этой программе - там анализируется исходный текст веб-страницы в поисках текста, соответствующего шаблону.

Ну а в общем случае, после загрузки веб-страницы, надо обратиться к свойству Links веб-страницы:

Sub ПечатьСпискаСсылокВебСтраницы()
    ' загружаем браузер Internet Explorer
   Set IE = CreateObject("InternetExplorer.Application"):
    ' указываем адрес сайта (веб-страницы), на которой будем искать ссылки
   addr$ = "http://excelvba.ru/services"

    IE.Navigate addr$    ' загружаем страницу
   While IE.busy Or (IE.readyState <> 4): DoEvents: Wend    ' ждем, пока загрузится страница
   
    For Each link In IE.Document.Links    ' перебираем все ссылки на странице
       ' выводим номер и адрес гиперссылки
       n = n + 1: Debug.Print "Ссылка №" & n, link.href
    Next

    IE.Quit: Set IE = Nothing    ' закрываем браузер
End Sub

Результат увидите в окне Immediate:

 

Хорошая програмка. Спасибо. А как можно загрузить с вэб-страницы гиперссылки?? Спасибо за ответ..

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
5 + 11 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.