Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вытащить средствами VBA текст html? / 25 сообщений из 50, страница 1 из 2
10.11.2010, 10:37
    #36946451
Komil_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
VBA:
Можно ли средствами VBA вытащить текст любого произвольного сайта в формате html (т.е. достаточно в виде только текста)? Само собой разумеется, что для этого требуется как минимум свободный доступ к и-нету, а также существование (в рабочем состоянии) сайта.
Предполагается следующее:
Имеется поле, где указывается адрес сайта.
При нажатии юзером кнопки VBA вытаскивает в виде текста сам сайт и сохранит как отдельный файл там же где проект VBA находится. При этом не требуется вытаскивание рисунков, звуков, фильмов и т.д. (так как эти объекты имеют достаточно "большой вес").


В и-нете порылся, нашёл "MSXML". Но как им пользоваться в VBA не умею. Может кто-нибудь знает примерчик? Какую-нибудь ссылочку?
Заранее благодарю за любую помощь!
...
Рейтинг: 0 / 0
10.11.2010, 10:44
    #36946479
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
...
Рейтинг: 0 / 0
10.11.2010, 11:51
    #36946752
Komil_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
.Михаил.,

Спасибо за ссылку. Но насколько я понял, там речь идёт об экспорте данных. А мне нужно наоборот, импорт данных. Как это сделать? Что-то не получается у меня.
...
Рейтинг: 0 / 0
10.11.2010, 12:01
    #36946815
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Посмотрите здесь, может подойдет
Парсинг с авторизацией в https
...
Рейтинг: 0 / 0
10.11.2010, 12:26
    #36946918
Komil_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
mds_worldПосмотрите здесь, может подойдет
Парсинг с авторизацией в https

Ваш код кажется это то, что мне надо.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub httpText()
    Dim s As New WinHttp.WinHttpRequest
    Dim ReturnStr As String, FileNumber, url
    
    url = "http://sql.ru/forum/actualpost.aspx?bid=4"
    Debug.Print url
    s.Open "GET", url
    s.Send
    ReturnStr = s.ResponseText
    Debug.Print ReturnStr
End Sub

Попробовал. Вроде работает! Спасибо БОЛЬШОЕ!!!!

А можно ещё один вопросик? У меня этот код сработал слегка медленно, видимо "WinHttp" пользуется средствами Internet Explorer. А можно ли каким то макаром заставить смотреть в сторону Firefox Mozilla/5.0? Мне кажется Firefox намного шустрее. Или я не угадал проблему скорости?
...
Рейтинг: 0 / 0
10.11.2010, 12:57
    #36947037
Komil_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Странно, но возникла куда более серьёзная проблема. Оказывается "WinHttp" не со всех сайтов вытаскивает текст нормально. В некоторых случаях выходит подобная абракадабра:
Код: plaintext
1.
2.
3.
        <span style="font-weight: bold;">?????µ ??N? ??N??µ??????N???N??°?µN??µ N?N??°????N?N? N??±?µN??µ?¶?µ????N??</span><br />
        <div style="font-style: oblique;">??????N? ??N? ???????µN?N??µN??µ?</div>
        <!-- div>???°??N?N?N????µ: 2011-03-15</div -->

Как бороться с этим?
...
Рейтинг: 0 / 0
10.11.2010, 13:05
    #36947067
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
> Автор: Komil_
> Как бороться с этим?


Научиттся работать с юникодом :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10.11.2010, 13:14
    #36947106
Komil_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Игорь Горбонос
> Автор: Komil_
> Как бороться с этим?


Научиттся работать с юникодом :)



Не могли бы помочь, как можно "WinHttp" познакомить с юникодом? Пытаюсь переключить на юникод, а он не в какую. Подозреваю, что у него нет такого свойства. Если это так, то очень, очень жаль. А мог быть идеальным решением для моего случая.
...
Рейтинг: 0 / 0
10.11.2010, 13:33
    #36947172
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
WinHttp не должен и не занимается разбором кодировок. Его задача получить то, что отдает сервер. Что с этим делать дальше — проблема автора. А автор даже не сообщает, что он собирается делать.
...
Рейтинг: 0 / 0
10.11.2010, 14:10
    #36947308
Komil_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
AntonariyWinHttp не должен и не занимается разбором кодировок. Его задача получить то, что отдает сервер. Что с этим делать дальше — проблема автора. А автор даже не сообщает, что он собирается делать.

Как не сообщил что делать? Сохранить как отдельный файл. Можно простой текстовый файл.
Т.е. Вы имеете ввиду если я сразу сохраню в файл, то там будет всё О.К.?
Щас попробую._
...
Рейтинг: 0 / 0
10.11.2010, 14:17
    #36947328
Komil_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Попробовал сразу сохранить в файл. Нет, не получился. Всё равно выходит абракадабра.
...
Рейтинг: 0 / 0
10.11.2010, 14:22
    #36947345
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Komil_Странно, но возникла куда более серьёзная проблема. Оказывается "WinHttp" не со всех сайтов вытаскивает текст нормально. В некоторых случаях выходит подобная абракадабра:
Код: plaintext
1.
2.
3.
        <span style="font-weight: bold;">?????µ ??N? ??N??µ??????N???N??°?µN??µ N?N??°????N?N? N??±?µN??µ?¶?µ????N??</span><br />
        <div style="font-style: oblique;">??????N? ??N? ???????µN?N??µN??µ?</div>
        <!-- div>???°??N?N?N????µ: 2011-03-15</div -->

Как бороться с этим?

анализировать на

<META content="text/html; charset=windows-1251" http-equiv="Content-Type">
--------------------------------------------------------------------utf-8
--------------------------------------------------------------------utf-16
............
и соответственно обрабатывать
...
Рейтинг: 0 / 0
10.11.2010, 14:46
    #36947425
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
ПЕНСИОНЕРКАKomil_Странно, но возникла куда более серьёзная проблема. Оказывается "WinHttp" не со всех сайтов вытаскивает текст нормально. В некоторых случаях выходит подобная абракадабра:
Код: plaintext
1.
2.
3.
        <span style="font-weight: bold;">?????µ ??N? ??N??µ??????N???N??°?µN??µ N?N??°????N?N? N??±?µN??µ?¶?µ????N??</span><br />
        <div style="font-style: oblique;">??????N? ??N? ???????µN?N??µN??µ?</div>
        <!-- div>???°??N?N?N????µ: 2011-03-15</div -->

Как бороться с этим?

анализировать на

<META content="text/html; charset=windows-1251" http-equiv="Content-Type">
--------------------------------------------------------------------utf-8
--------------------------------------------------------------------utf-16
............
и соответственно обрабатывать

META тэга может и не быть
...
Рейтинг: 0 / 0
10.11.2010, 15:05
    #36947508
Komil_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
ПЕНСИОНЕРКА
анализировать на

<META content="text/html; charset=windows-1251" http-equiv="Content-Type">
--------------------------------------------------------------------utf-8
--------------------------------------------------------------------utf-16
............
и соответственно обрабатывать

Анализировать как? Что это? Куда мне вставить подобный текст?
Я понимаю, что проблема в Unicode, но не понимаю как решить.



P.S.
сейчас мне необходимо отключиться из и-нета. я не смогу ответить до завтра. если не отвечу, то не сочтите за невежливость. заранее извиняюсь.
...
Рейтинг: 0 / 0
11.11.2010, 12:37
    #36949168
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Komil_,
опять эти библиотеки
чтобы не выделяло в строке
Dim s As New WinHttp.WinHttpRequest
Какую библиотеку надо подключить???
...
Рейтинг: 0 / 0
11.11.2010, 12:42
    #36949189
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Эндрю, а ты вообще сообщения читаешь? по ссылкам ходишь? с гуглем хоть немного дружишь?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11.11.2010, 12:44
    #36949203
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Игорь Горбонос,
Dim s As New WinHttp.WinHttpRequest 'библиотека Microsoft WinHTTP Services, version 5.1
...
Рейтинг: 0 / 0
11.11.2010, 12:45
    #36949204
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Ципихович Эндрю,

'Tool.References... Add a reference to Microsoft WinHTTPServices
...
Рейтинг: 0 / 0
11.11.2010, 13:45
    #36949383
Komil_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Жалко, что WinHTTP не дружит с UNICODE. Очень жаль.
А так если сайт англоязычный, то вполне подойдёт. Но беда в том, что мне как назло именно русский текст и нужен.
Ладно. Буду смотреть на сторону MSXML2. Надеюсь он менее капризный.
...
Рейтинг: 0 / 0
11.11.2010, 19:49
    #36950359
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Komil_, потом выложите скрипт пожалуйста
может Вам это нужно Текст_на_странице_WEB = IE.Document.body.innerText 'текст на WEB странице ????????
И если я не ршобаюсь этот скрипт не весь текст с страницы берёт в переменную, почему???
...
Рейтинг: 0 / 0
11.11.2010, 19:49
    #36950361
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
ршобаюсь это ошибаюсь
...
Рейтинг: 0 / 0
11.11.2010, 23:49
    #36950641
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Komil_Попробовал сразу сохранить в файл. Нет, не получился. Всё равно выходит абракадабра.Попробуйте сохранять не в текстовый, а в .DOC-файл. Ворд умеет справляться с юникодом.
...
Рейтинг: 0 / 0
12.11.2010, 06:45
    #36950804
Komil_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Спасибо всем кто участвовал.
Я в и-нете поковырял и нашёл одну процедурку (в каком сайте забыл, что-то вроде excelplaneta что ли, не помню). Вообщем видоизменил и получился что надо! По крайнем мере именно то, что мне надо!

А код такой (если кому пригодится)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub GetInformationFromINet()
    Dim oHttp As Object
    Dim strURL As String
    
    strURL = "здесь необходимо указать адрес сайта, что то вроде http://mail.ru/"
    
    On Error Resume Next
    Set oHttp = CreateObject("MSXML2.XMLHTTP")
    If Err.Number <>  0  Then
        Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
    End If
    On Error GoTo  0 
    If oHttp Is Nothing Then
        MsgBox "Не удалось инициализировать объект MSXML!"
        Exit Sub
    End If
    
    oHttp.Open "GET", strURL, False
    oHttp.Send
    
    Debug.Print oHttp.ResponseText
    Set oHttp = Nothing
    MsgBox "Данные успешно импортированы!", vbInformation
End Sub

Автор процедуры специально использовал тип данных "Object" вместо подключения к библиотеке "MSXML2" (т.к. у конечного пользователя может и не быть такой библиотеки). Проверил, работает и без подключения библиотеки. Очень простой код, но рабочий. С unicode нет проблем!
То, что предложил Михаил, в принципе примерно почти тоже самое, правда нужно было там слегка убрать лишнее.
...
Рейтинг: 0 / 0
12.11.2010, 08:30
    #36950861
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Komil_ Автор процедуры специально использовал тип данных "Object" вместо подключения к библиотеке "MSXML2" (т.к. у конечного пользователя может и не быть такой библиотеки). Проверил, работает и без подключения библиотеки.
Если у пользователя нет зарегестрированных в реестре данных библоитек, то использование функции CreateObject даст результат:
Код: plaintext
1.
MsgBox "Не удалось инициализировать объект MSXML!"
С другой стороны: прямое подключение к проекту библиотеки не требует ее регистрации в реестре. В некоторых случаях, когда есть пользовательские ограничения, регистрация библиотеки невозможна.
...
Рейтинг: 0 / 0
12.11.2010, 08:39
    #36950870
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить средствами VBA текст html?
Komil_А код такой (если кому пригодится)
После выполнения метода
Код: plaintext
1.
oHttp.Send
я бы сделал проверку на текущее состояние загрузки данных readyState и результата ответа на запрос status - загляни обязательно сюда . Коды http-ответа здесь .
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вытащить средствами VBA текст html? / 25 сообщений из 50, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]