MyTetra Share
Делитесь знаниями!
Скачивание исходного кода web-страницы в текстовый файл
Время создания: 31.07.2019 22:37
Текстовые метки: vba, InternetExplorer, web
Раздел: Разные закладки - VBA
Запись: xintrea/mytetra_db_adgaver_new/master/base/1514720528pdad8ouv8h/text.html на raw.githubusercontent.com

Данная функция возвращает исходный текст web-страницы:

Function GetHTTPResponse(ByVal sURL As String) As String

On Error Resume Next

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")

With oXMLHTTP

.Open "GET", sURL, False

' раскомментируйте следующие строки и подставьте верные IP, логин и пароль

' если вы сидите за proxy

' .setProxy 2, "192.168.100.1:3128"

' .setProxyCredentials "user", "password"

.send

GetHTTPResponse = .responseText

End With

Set oXMLHTTP = Nothing

End Function



Пример использования функции GetHTTPResponse

Private Sub ПримерИспользованияФункции_GetHTTPResponse()

' считываем исходный текст страницы ExcelVBA.ru в переменную txt

txt = GetHTTPResponse("http://ExcelVBA.ru")

' получаем путь к папке "Рабочий стол"

ПутьКРабочемуСтолу = CreateObject("WScript.Shell").SpecialFolders("Desktop")

' сохраняем текст из переменной txt в файл PageText.txt на рабочем столе

SaveTXTfile ПутьКРабочемуСтолу & "\PageText.txt", txt

' открываем созданный текстовый файл в Excel

Workbooks.OpenText ПутьКРабочемуСтолу & "\PageText.txt"

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/GetWebPageText


Еще один вариант кода - где можно задать таймаут
(чтобы код не подвисал, если нет ответа от сайта в течение нескольких секунд)

ВНИМАНИЕ: Надо подключить в Tools - References библиотеку Microsoft WinHTTP Services 5.1

Const TIMEOUT& = 6 ' в секундах


Function GetResponse(ByVal URL$) As String

On Error Resume Next: Err.Clear

Static xmlhttp As WinHttpRequest

If xmlhttp Is Nothing Then Set xmlhttp = New WinHttpRequest

 

xmlhttp.Open "GET", URL$, True: DoEvents

xmlhttp.Send: DoEvents

 

If Not xmlhttp.WaitForResponse(TIMEOUT&) Then

Debug.Print "timeout", URL: Exit Function

End If

 

GetResponse = xmlhttp.responsetext

End Function

Sub test() ' пример использования

On Error Resume Next

txt = GetResponse("http://ExcelVBA.ru/")

Debug.Print Len(txt) ' возвращает длину текста: 62737 символов

End Sub



Ещё один пример функции - с возможностью задать кодировку:

Sub ТекстВебСтраницы_вКодировке_Windows1251()

URL$ = "http://ExcelVBA.ru/"

MsgBox GetHTTPResponse(URL$)

' MsgBox GetHTTPResponse(URL$, "windows-1251") ' если бы сайт выдавал страницу в windows-1251

End Sub


Function GetHTTPResponse(ByVal URL$, Optional ByVal Encoding$) As String

On Error Resume Next

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")

With oXMLHTTP

.Open "GET", URL$, False

.Send

If Len(Encoding$) Then

With CreateObject("ADODB.Stream")

filename$ = Environ("tmp") & "\response.txt"

.Charset = Encoding$: .Type = 1 ' adTypeBinary:

.Open: .Write oXMLHTTP.ResponseBody

.SaveToFile filename$, 2

.Type = 2 'adTypeText

.LoadFromFile filename$

GetHTTPResponse = .ReadText

.Close

End With

Else

GetHTTPResponse = .ResponseText

End If

End With

Set oXMLHTTP = Nothing

End Function

' еще один вариант макроса для загрузки страницы

Sub test_internet()

On Error Resume Next

URL$ = "http://ExcelVBA.ru/"

 

Const TIMEOUT& = 6 ' в секундах

Set xmlhttp = CreateObject("WinHttp.WinHttpRequest.5.1")

 

xmlhttp.Open "GET", URL$, True: DoEvents

xmlhttp.Send: DoEvents

 

If Not xmlhttp.WaitForResponse(TIMEOUT&) Then

MsgBox "timeout", URL: Exit Sub

End If

 

txt$ = xmlhttp.responsetext

MsgBox txt, vbInformation, "Длина ответа: " & Len(txt)

End Sub



А эту заготовку кода я использую, когда пишу макросы для загрузки данных с сайтов

Sub LoadInfo()

' On Error Resume Next

Dim ra As Range: Set ra = Range(Range("b2"), Range("b" & Rows.Count).End(xlUp))

If ra.Row = 1 Then MsgBox "На листе не найден список ИНН", vbCritical: Exit Sub

 

Dim cell As Range, txt$, res$, result_cell As Range, v

 

Const TIMEOUT& = 6: Static xmlhttp As Object

If xmlhttp Is Nothing Then Set xmlhttp = CreateObject("WinHttp.WinHttpRequest.5.1")

 

For Each cell In ra.Cells

URL$ = "https://sbis.ru/contragents/" & Trim(cell)

 

xmlhttp.Open "GET", URL$, True: DoEvents

xmlhttp.Send: DoEvents

 

If Not xmlhttp.WaitForResponse(TIMEOUT&) Then

Debug.Print "timeout", URL

Else

txt$ = "": txt$ = xmlhttp.responsetext

' обработка ответа сервера

' функцию GetTags можно взять здесь: excelvba.ru/code/html

res$ = "": res$ = GetTags(txt, "div", "class", "cCard__Content-Var", "config 1")

res$ = Replace(res$, "%22", "'"): res$ = Replace(res$, """", "'")

 

' ищем в ответе нужные данные

With cell.EntireRow

.Cells(3) = Replace(GetValue(res$, "УставнойКапитал"), " ", "")

.Cells(4) = GetValue(res$, "Статус")

.Cells(5) = GetValue(res$, "ВыручкаСтатистика")

.Cells(6) = GetValue(res$, "ПрибыльСтатистика")

.Cells(7) = GetValue(res$, "Выручка")

.Cells(8) = GetValue(res$, "Прибыль")

.Cells(9) = GetValue(res$, "ЧисленностьСотрудников")

End With

End If

Next cell

End Sub


Вложение

Размер

Загрузки

Последняя загрузка

GetHTTPResponse.xls

25 КБ

58

10 недель 2 дня назад


Прикрепленные файлы:
Так же в этом разделе:
 
MyTetra Share v.0.64
Яндекс индекс цитирования