7 / 7 / 0
Регистрация: 25.11.2010
Сообщений: 38
1

Information From Internet to Excel

20.07.2011, 12:00. Показов 3654. Ответов 20
Метки нет (Все метки)

Здравствуйте. Задача состоит в том чтобы собирать информацию с определённых сайтов, пока что это делается с помощью вот такого подключения к Интернету:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_OPEN_TYPE_PROXY = 3
Private Const scUserAgent = "VB Project"
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
 
Private Function OpenURL(ByVal sUrl As String) As String
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer As String
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
bDoLoop = True
While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
Wend
If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)
OpenURL = sBuffer
End Function
Ещё использовалось такое когда первое не работало:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Function OpenURL1(ByVal sUrl As String) As String
Set TheBrowser = CreateObject("InternetExplorer.Application")
TheBrowser.Visible = True
TheBrowser.Navigate URL:=sUrl
Do
If TheBrowser.ReadyState = 4 Then
TheBrowser.Visible = False
Exit Do
Else
DoEvents
End If
Loop
Set objDoc = TheBrowser.Document
'Stop
strMyPage = objDoc.body.innerHTML
TheBrowser.Quit
Set objDoc = Nothing
Set ie = Nothing
OpenURL1 = strMyPage
End Function
* По идее если ie не перезапускать каждый раз, то работать станет быстрее, но думаю всё равно медленнее чем первое... Пока не пробовал...

Первое гораздо быстрее работает, но всё равно не достаточно быстро, как можно ускорить процесс подключения? Есть ли более быстрые способы? Можно ли оптимизировать эти подключения?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2011, 12:00
Ответы с готовыми решениями:

Internet Information Services
Помогите. Нету этой программы. Дайте ссылку на скачивание (Не сайт Микрософт).

Как установить Internet Information Services (IIS)?
Помогите, кто может! Не могу писать Инетные приложения на VB.NET. Комп говорит что типа IIS...

Где находится Web -сервер Miscrosoft Internet Information Servce?
Всем доброго время суток столкнулся с такой проблемой не могу найти где находится Web -сервер...

В ледующей версии Internet Information Services установка ASP является опциональной
Привет всем! Итак судьба преподнесла всем огромный подарок, кто изучал ASP, в следующей версии...

20
7 / 7 / 0
Регистрация: 25.11.2010
Сообщений: 38
21.07.2011, 18:59  [ТС] 2
Ну же ребята, разве никто не может помочь?
0
Заблокирован
21.07.2011, 19:04 3
Sl12,
даже не ждите: Internet Explorer редко очень обсуждается.
То ли про него ничего не знают, то ли не хотят секреты выдавать.
0
1506 / 476 / 56
Регистрация: 10.04.2009
Сообщений: 7,985
21.07.2011, 19:53 4
не пойму
добавил скрипт:
Visual Basic
1
2
3
4
5
Sub Считываем_с_Internet_Explorer()
 
sUrl = "http://www.yandex.ru/"
OpenURL sUrl
End Sub
Проверяю, ничего не происходит
????????

Добавлено через 18 минут
Цитата Сообщение от Sl12 Посмотреть сообщение
чтобы собирать информацию с определённых сайтов
то есть качать не открывая браузер??
видел на bit.pirit.info/forum/viewtopic.php?t=17675
0
7 / 7 / 0
Регистрация: 25.11.2010
Сообщений: 38
21.07.2011, 20:44  [ТС] 5
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
не пойму
добавил скрипт:
Visual Basic
1
2
3
4
5
Sub Считываем_с_Internet_Explorer()
 
sUrl = "http://www.yandex.ru/"
OpenURL sUrl
End Sub
Проверяю, ничего не происходит
????????

Добавлено через 18 минут

то есть качать не открывая браузер??
видел на bit.pirit.info/forum/viewtopic.php?t=17675
Попробуй просто Text = OpenURL("свой_адрес") и скачается страничка.
Первое подключение качает не открывая браузер, второе открывая.

Добавлено через 58 секунд
Цитата Сообщение от Busine2009 Посмотреть сообщение
Sl12,
даже не ждите: Internet Explorer редко очень обсуждается.
То ли про него ничего не знают, то ли не хотят секреты выдавать.
Жалко что так, интересная ведь тема.
0
1506 / 476 / 56
Регистрация: 10.04.2009
Сообщений: 7,985
21.07.2011, 20:46 6
Цитата Сообщение от Sl12 Посмотреть сообщение
Попробуй просто Text = OpenURL("свой_адрес") и скачается страничка
тогда каков код макроса??
0
7 / 7 / 0
Регистрация: 25.11.2010
Сообщений: 38
22.07.2011, 09:12  [ТС] 7
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
тогда каков код макроса??
В первом посте же 2 ф-ции, работают по одинаковому принципу:

StringHTML = OpenURL("свой_адрес")

Весь макрос, использующий данные функции писать смысла нет, оптимизация нужна в скачивании HTML.
0
Заблокирован
22.07.2011, 10:43 8
Цитата Сообщение от Sl12 Посмотреть сообщение
как можно ускорить процесс подключения?
а если не брать всю страницу, а только ту информацию, которая нужна (я правда не знаю, как это сделать)?

Надо придумать что-то как у Яндекс, Гугл - они же как-то просматривают страницы.
0
7 / 7 / 0
Регистрация: 25.11.2010
Сообщений: 38
22.07.2011, 12:11  [ТС] 9
Цитата Сообщение от Busine2009 Посмотреть сообщение
а если не брать всю страницу, а только ту информацию, которая нужна (я правда не знаю, как это сделать)?

Надо придумать что-то как у Яндекс, Гугл - они же как-то просматривают страницы.
По идее они тоже всю страницу скачивают, а в ней уже нужное смотрят, мне надо ускорить процесс скачивания...
0
Заблокирован
22.07.2011, 12:11 10
Sl12,
вот такой вариант, по идее должен быть быстрее варианта с использованием VBA. Запускать из VBA, относящегося к Word. Оба кода надо поместить в один модуль, запускать надо будет только процедуру Main. В итоге в документе Word будет HTML-код только Google.

Main
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Main()
Dim TheBrowser As Object
Dim sUrl(1 To 2) As String
Dim i As Long
Set TheBrowser = CreateObject("InternetExplorer.Application")
sUrl(1) = "http://www.yandex.ru"
sUrl(2) = "http://www.google.com"
For i = 1 To 2 Step 1
    ActiveDocument.Range.Text = OpenURL1(TheBrowser, sUrl(i))
Next i
TheBrowser.Quit
Set TheBrowser = Nothing
End Sub

OpenURL1
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Function OpenURL1(TheBrowser As Object, ByVal sUrl As String) As String
Dim objDoc As Object
Dim strMyPage As Variant
TheBrowser.Navigate URL:=sUrl
Do
    If TheBrowser.ReadyState = 4 Then
        Exit Do
    Else
        DoEvents
    End If
Loop
Set objDoc = TheBrowser.Document
'Stop
strMyPage = objDoc.body.innerHTML
Set objDoc = Nothing
OpenURL1 = strMyPage
End Function
0
1506 / 476 / 56
Регистрация: 10.04.2009
Сообщений: 7,985
22.07.2011, 16:49 11
Sl12
меня интерисует только 1 я функция в Вашем 1 м посте, потому, что там нет Navigate
куда надо указать там, вот это:
Цитата Сообщение от Sl12 Посмотреть сообщение
StringHTML = OpenURL("свой_адрес")
какой строкой кода её поставить, чтобы она запустилась??
1
Заблокирован
22.07.2011, 16:55 12
Ципихович Эндрю,
функция вызывается другой функцией или процедурой. Сама по себе функция как правило не работает.
Поместите этот код в VBA, относящийся к Word,
Visual Basic
1
2
3
4
5
Sub Main()
Dim sUrl As String
sUrl = "http://www.yandex.ru"
ActiveDocument.Range.Text = OpenURL(sUrl)
End Sub
в один модуль с функцией в #1.

Результатом будет код HTML страницы Yandex в документе.
2
1506 / 476 / 56
Регистрация: 10.04.2009
Сообщений: 7,985
22.07.2011, 18:50 13
реально если процедура

Visual Basic
1
2
3
4
5
6
7
8
9
Sub Считываем_с_Internet_Explorer()
 
If Tasks.Exists(Name:="Windows Internet Explorer") = False Then Beep 'Exit Sub
 
Dim sUrl As String
sUrl = "http://www.yandex.ru"
ActiveDocument.Range.Text = OpenURL(sUrl)
 
End Sub
и 1 функция 1 поста то видно что Иэксплоер не открывается и это не надо, тогда что делается в функции на этом отрезке:
Visual Basic
1
2
3
4
5
6
While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
Wend
очень напоминает, что ИЭ всё же открывается

Добавлено через 35 минут
и почему-то код HTML страницы выданный прогой
отличается от реального
1
7 / 7 / 0
Регистрация: 25.11.2010
Сообщений: 38
22.07.2011, 23:56  [ТС] 14
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Sl12
меня интерисует только 1 я функция в Вашем 1 м посте, потому, что там нет Navigate
куда надо указать там, вот это:

какой строкой кода её поставить, чтобы она запустилась??
В первом посте написана ф-ция, а StringHTML = OpenURL("свой_адрес") это вызов ф-ции в нужном Вам месте.


Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
реально если процедура

Visual Basic
1
2
3
4
5
6
7
8
9
Sub Считываем_с_Internet_Explorer()
 
If Tasks.Exists(Name:="Windows Internet Explorer") = False Then Beep 'Exit Sub
 
Dim sUrl As String
sUrl = "http://www.yandex.ru"
ActiveDocument.Range.Text = OpenURL(sUrl)
 
End Sub
и 1 функция 1 поста то видно что Иэксплоер не открывается и это не надо, тогда что делается в функции на этом отрезке:
Visual Basic
1
2
3
4
5
6
While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
Wend
очень напоминает, что ИЭ всё же открывается

Добавлено через 35 минут
и почему-то код HTML страницы выданный прогой
отличается от реального
На сколько я понимаю в первой ф-ции используется более низкий уровень чем ie, собственно ie использует подобные ф-ции с wininet.dll для своей работы, отличия в коде опять же указывают на то что ie не запускается, - код скачивается без обработки браузером.
Приоритет оптимизации у первой ф-ции, но и второй нужно сделать порасторопнее (она нужна когда нужно создать видимость человека, первую ф-цию иногда банят).
0
Заблокирован
23.07.2011, 13:52 15
Sl12,
в #10 посмотрите код.
1
7 / 7 / 0
Регистрация: 25.11.2010
Сообщений: 38
26.07.2011, 14:12  [ТС] 16
Цитата Сообщение от Busine2009 Посмотреть сообщение
Sl12,
в #10 посмотрите код.
Посмотрю, попозже протестирую на скорость, сейчас вообще времени свободного нет. Спасибо всем.
Варианты ещё принимаются
0
7 / 7 / 0
Регистрация: 25.11.2010
Сообщений: 38
06.08.2011, 14:10  [ТС] 17
Цитата Сообщение от Busine2009 Посмотреть сообщение
Sl12,
вот такой вариант, по идее должен быть быстрее варианта с использованием VBA. Запускать из VBA, относящегося к Word. Оба кода надо поместить в один модуль, запускать надо будет только процедуру Main. В итоге в документе Word будет HTML-код только Google.

Main
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Main()
Dim TheBrowser As Object
Dim sUrl(1 To 2) As String
Dim i As Long
Set TheBrowser = CreateObject("InternetExplorer.Application")
sUrl(1) = "http://www.yandex.ru"
sUrl(2) = "http://www.google.com"
For i = 1 To 2 Step 1
    ActiveDocument.Range.Text = OpenURL1(TheBrowser, sUrl(i))
Next i
TheBrowser.Quit
Set TheBrowser = Nothing
End Sub

OpenURL1
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Function OpenURL1(TheBrowser As Object, ByVal sUrl As String) As String
Dim objDoc As Object
Dim strMyPage As Variant
TheBrowser.Navigate URL:=sUrl
Do
    If TheBrowser.ReadyState = 4 Then
        Exit Do
    Else
        DoEvents
    End If
Loop
Set objDoc = TheBrowser.Document
'Stop
strMyPage = objDoc.body.innerHTML
Set objDoc = Nothing
OpenURL1 = strMyPage
End Function
Пока всё никак руки не доходят попробовать, ещё хотел бы добавить от себя как ускорить чтение / запись (мне здорово помогло):
В начале макроса:
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
Перед End Sub:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
1
1506 / 476 / 56
Регистрация: 10.04.2009
Сообщений: 7,985
06.08.2011, 14:16 18
Цитата Сообщение от Sl12 Посмотреть сообщение
В начале макроса:
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
Перед End Sub:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
из всех знаю только
'включение\отключение дёргания экрана при выполнении кода
Visual Basic
1
2
    Application.ScreenUpdating = True
    Application.ScreenUpdating = False
Остальные зачем нужны??
0
7 / 7 / 0
Регистрация: 25.11.2010
Сообщений: 38
06.08.2011, 15:21  [ТС] 19
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
из всех знаю только
'включение\отключение дёргания экрана при выполнении кода
Visual Basic
1
2
    Application.ScreenUpdating = True
    Application.ScreenUpdating = False
Остальные зачем нужны??
Для отключения пересчёта формул и событий выполняемых в файле, - в общем чтобы выполнялся только макрос.
1
1506 / 476 / 56
Регистрация: 10.04.2009
Сообщений: 7,985
06.08.2011, 15:24 20
Цитата Сообщение от Sl12 Посмотреть сообщение
Для отключения пересчёта формул и событий выполняемых в файле, - в общем чтобы выполнялся только макрос.
Это только Эксель касается??
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2011, 15:24
Помогаю со студенческими работами здесь

Проблема с чатом: HTTP Error 500-12 Application Restarting Internet Information Services
У меня есть Win2000 Server c IIS 5 Я взял бесплатный чат на ASP...

При соединени с таблицами VFP из ASP выдается ошибка: HTTP 500.100 - Internal Server Error - ASP error Internet Information Services
Вот кусок моего кода filePath = Server.MapPath('users.dbf'); DSN='Driver={Microsoft Visual...

IIS- asp ошибка: HTTP 500.100 - Внутренняя ошибка сервера - ошибка ASP Internet Information Services
Привет! Конфигурация win2000pro sp2, стандартный IIS, IE 5. При попытке обратиться к...

Работа с Internet Explorer через Excel
Здравствуйте! Подскажите, пожалуйста, простой макрос, который делал бы refresh страницы в IE и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru