powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / парсинг web-страницы
26 сообщений из 26, показаны все 2 страниц
парсинг web-страницы
    #37227684
ggguueest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите плз разобраться с парсингом страницы.
загружаю страницу, там текст.
как мне записать текст, который находится между двумя определенными фразами к себе в excel файл построчно?

Код: plaintext
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.
Sub ЗагрузкаТекстаВебСтраницы()
    Dim F, W As String
        
    Set IE = CreateObject("InternetExplorer.Application"):    ' загружаем браузер Internet Explorer
    On Error Resume Next
    addr$ = Sheets("temp").Cells([ 1 ], [ 1 ])   ' указываем адрес сайта (веб-страницы), текст которой загружаем

    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$ ' выводим сообщение с текстом с сайта
    
    F = "строка1"
    W = "строка10"

   Sheets("parse").Cells([ 1 ], [ 1 ])=???
   
    
    
End Sub
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37227842
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ggguueest,
как записать текст ...
Код: plaintext
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.
32.
33.
34.
35.
36.
Sub ЗагрузкаТекстаВебСтраницы()
    Dim F$, W$
    Dim IE As Object, addr$, txt$

    Set IE = CreateObject("InternetExplorer.Application")    ' загружаем браузер Internet Explorer
    ' On Error Resume Next  ' <-- "глотать" ошибки вредно для здоровья!

 ' ... получение текста Web-траницы в переменную txt

    F = "строка1"
    W = "строка10"

Dim k&, z&, arr

    k = InStr( 1 , txt, F, vbTextCompare)                     ' поиск первой фразы в тексте страницы
    If k >  0  Then s = Mid$(txt, k + Len(F)) Else s = txt    ' нашли - "укоротили" текст, не нашли - взяли текст полностью

    k = InStr( 1 , s, W, vbTextCompare)                       ' поиск второй фразы в "остатке" текста
    If k >  0  Then s = Left$(s, k -  1 )                       ' нашли - "укоротили" "остаток", не нашли - взяли "остаток" полностью

    arr = Split(s, vbNewLine)                               ' создали из строки массив, разделитель - системный "символ новой строки"
                                                            ' если на Web-странице изпользовался другой  "символ новой строки"
                                                            ' нас ждет сокрушительное фиаско :'(

    With Worksheets("parse")                                ' Запись массива на лист
        .UsedRange.ClearContents
        k =  0 : z =  1 
        For k =  0  To UBound(arr)
            s = Trim(arr(k))                                ' строки, состоящие только из пробелов, на лист не пишем
            If s > "" Then
                .Cells(z,  1 ) = s: z = z +  1 : End If   
        Next k
    End With

    Erase arr                                               ' освобождение памяти, выделенной под массив

End Sub
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37229183
ggguueest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скукотища, спасибо, то что нужно!
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230087
SERGe@NT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарисчи, не подскажете ли:

А как получить инфу с сайта, который требует авторизации (аутентификации)?
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230098
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERGe@NT, програмно ввести в поля логин, пароль и нажать ОК
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230226
SERGe@NT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович ЭндрюSERGe@NT, програмно ввести в поля логин, пароль и нажать ОК
Если можно, по-подробнее...
Есть такая строка:
ie.navigate "ссылка на сайт"
сайт требует авторизации (появляется окно: введите логин и пароль)
как должна выглядеть строка, чтобы авторизация походила без появления окна.

Спасибо!
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230237
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERGe@NT, не знаю от чего это зависит, но бывает так
ie.navigate "http://10.196.192.26:9204/cgi-bin/auth.cgi?login_ref=%2fcgi-bin%2fpwrap.cgi?proc=t_webif.t_main('spr_body')&login=R9&passwd=nhfccf46661" 'страница ....
видите там в конце есть
login=R9&passwd=nhfccf46661
можете не проверять это не интернет, а локальная сеть, но открывается браузером
А если не повезёт, тогда что-то вроде этого
Код: plaintext
1.
2.
3.
'имя формы в коде имеет название: form name="
IE.Document.forms("formLogin").all("tbUsername").Value = "a0пав61" 'ввести имя пользователя ...
IE.Document.forms("formLogin").all("tbPassword").Value = "rfаывhnf67" 'ввести пароль ...
IE.Document.forms("formLogin").all("loginButton").Click 'нажать кнопку Войти, кнопка имеет название "loginButton"
То есть делаете кода пошагово будете видеть как прога за Вас в поля введёт логин и пароль и нажмёт ОК
Но если у Вас инет тогда выложите адрес страницы может кто более точно подскажет
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230702
EducatedFool
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример кода для авторизации на сайте:
http://excelvba.ru/code/ConnectServer
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230882
ggguueest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что-то у меня строка неправильно парсится..
в текстовом варианте пропадают пробелы между числами..
исходный код там такой
Код: plaintext
<tr><td> 5 </td><td> 5 </td><td> 24   000 </td><td> 27   000 </tr>
а получается
Код: plaintext
 5524   00027   000 


нужно цифры загрузить в ячейки, но не получается.. подскажите плз, как это сделать..
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230925
ggguueest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
о, сделал при помощи innerHtml..
загрузился исходный код..
башка уже совсем не варит, помогите плз с такой ерундой
Код: plaintext
1.
2.
3.
4.
5.
</TH></TR>
<TR>
<TD> 5 </TD>
<TD> 5 </TD>
<TD> 24   000 </TD>
<TD> 27   000 </TD>
надо, чтобы это дело записалось в строку каждая цифра в свою ячейку..
плз, хелп...
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230940
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggguueest, от сих "<" до сих ">" заменить на "" подходит??
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230952
ggguueest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,

не, надо получить
А1= 5
А2= 5
А3= 24000
А4= 27000
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230959
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggguueest,

фиг поймёшь то ли
не, надо получить
или
мне, надо получить
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230962
ggguueest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,

надо получить
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230966
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggguueest, согласен, тут много лишнего, но и много полезного:
Код: plaintext
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.
32.
33.
'курс доллара согласно ЦБ РФ
    Dim Запрос$, Ответ$, Курс$
    Dim oHttp As Object
    Dim ДЕНЬ$, Месяц$, ГОД$
    Дата = Date
    ДЕНЬ = Format(Дата, "dd"): Месяц = Format(Дата, "mm"): ГОД = Format(Дата, "yyyy")
    Запрос = "http://cbr.ru/currency_base/daily.aspx?C_month=" & Месяц & "&C_year=" _
   & ГОД & "&date_req=" & ДЕНЬ & "%2F" & Месяц & "%2F" & ГОД
    Selection.TypeText Text:=Запрос & Chr$( 13 ) 'Chr$(13) - это абзац
    On Error Resume Next
    Set oHttp = CreateObject("MSXML2.XMLHTTP")
    If Err.Number <>  0  Then Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
    On Error GoTo  0 
    If oHttp Is Nothing Then MsgBox$ "Ошибка " & Err.Number & " " & Err.Description: Exit Sub
    oHttp.Open "GET", Запрос, False
    oHttp.Send
    Ответ = UCase(oHttp.responseText)
    Selection.TypeText Text:=Ответ
    Курс = CCur(Mid(Ответ, InStr(InStr( 1 , Ответ, "USD"), Ответ, "</TD></TR>") -  7 ,  7 ))

Первой строкой переводят весь текст в верхний регистр. Можно сделать не UCase, а LCase и перевести в нижний ре-гистр, но тогда в следующей строке образцы поиска задавать маленькими буквами.
Вторая строка: 
Для начала кусочек текста страницы, о котором пойдет речь:
<td align="left">  USD</td>
<td align="right"> 1 </td>
<td>  Доллар США</td>
<td align="right"> 30 , 3505 </td></tr>
•  InStr( 1 , Ответ, "USD") - ищет с начала полученного текста три буквы - USD
•  второй InStr ищет от найденной позиции закрывающие теги строки и столбца html-таблицы. Как раз перед ними находится значение искомого курса
•  От найденной позиции отсчитывается "взад" семь символов (количество символов значения курса) и вырезаются
•  После чего вырезанные семь символов преобразовываются из текста в число, которое и есть искомым курсом

    Set oHttp = Nothing
    MsgBox$ "Сегодня курс доллара согласно ЦБ РФ равен: " & Курс
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37230968
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
соль моего ответа:
Первой строкой переводят весь текст в верхний регистр. Можно сделать не UCase, а LCase и перевести в нижний ре-гистр, но тогда в следующей строке образцы поиска задавать маленькими буквами.
Вторая строка:
Для начала кусочек текста страницы, о котором пойдет речь:
<td align="left"> USD</td>
<td align="right">1</td>
<td> Доллар США</td>
<td align="right">30,3505</td></tr>
• InStr(1, Ответ, "USD") - ищет с начала полученного текста три буквы - USD
• второй InStr ищет от найденной позиции закрывающие теги строки и столбца html-таблицы. Как раз перед ними находится значение искомого курса
• От найденной позиции отсчитывается "взад" семь символов (количество символов значения курса) и вырезаются
• После чего вырезанные семь символов преобразовываются из текста в число, которое и есть искомым курсом

ОК??
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37231036
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ggguueest...надо, чтобы это дело записалось в строку каждая цифра в свою ячейку..

Код: plaintext
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
' переносит данные (без форматирования) из таблицы HTML - на лист Excel
' (!) в HTML таблицы с объединнёными ячейками и вложенными таблицами обрабатывать не умеет
' параметры:
' [in] aCell - ссылка на ячейку листа Excel с которой начнём выгрузку
' [in] sTBL - таблица в HTML
'               начинается с тега <TABLE ...> (не обязательно)
'               заканчивается тегом </TABLE> (не обязательно)
' [in Opt] iRows - сколько строк переносить (если не задан переносим все)
' [in Opt] iCols - сколько столбцов переносить (если не задан переносим все)
' возвращаемое значение:
'   0  - "парсинг" прошёл удачно
'   2  - не найден открывающий тэг строки
'   4  - не найден закрывающий тэг строки
'   8  - не найден открывающий тэг столбца
'   16 - не найден закрывающий тэг столбца
'   32 - ошибка при выгрузке данных на лист
Function HtmlTableToSheet%(aCell As Range, sTBL$, Optional iRows%, Optional iCols%)
Dim s$, sRow$, k%, k2%, z%, z2%
Dim iRCopied%, iCCopied%
Dim iExitDo%
    
    s = Replace(sTBL, vbNewLine, "")
    s = UCase(s)
    
    k = InStr( 1 , s, "<TR")      ' открывающий тэг строки в HTML таблице
    If k =  0  Then ' не нашли открывающего тэга строки - вышли из функции с кодом 2
        HtmlTableToSheet =  2 : Exit Function
    End If
    
    ' цикл по строкам HTML таблицы
    Do While k >  0  And (iRows =  0  Or iRCopied < iRows)
        k = InStr(k +  3 , s, ">")        ' окончание открываюшего тэга строки
        k2 = InStr(k +  1 , s, "</TR>")   ' закрывющий тэг строки
        
        If k2 =  0  Then ' не нашли закрывающего тэга строки - вышли из цикла (функции) с кодом 4
            HtmlTableToSheet =  4 : Exit Do
        End If
        
        sRow = Mid(s, k +  1 , k2 - k -  1 )  ' строка HTML таблицы без открывающего и закрывающего тэгов
        z = InStr( 1 , sRow, "<TD")   ' открывающий тэг столбца в HTML таблице
        If z =  0  Then ' не нашли открывающего тэга столбца - вышли из цикла (функции) с кодом 8
            HtmlTableToSheet =  8 : Exit Do
        End If
        
        iCCopied =  0  ' счетчик скопированных столбцов в текущей строке
        
        ' цикл по столбцам текущей строки HTML таблицы
        Do While z >  0  And (iCols =  0  Or iCCopied < iCols)
            z = InStr(z +  3 , sRow, ">")        ' окончание открываюшего тэга столбца
            z2 = InStr(z +  1 , sRow, "</TD>")   ' закрывющий тэг столбца
            
            If z2 =  0  Then  ' не нашли закрывающего тэга столбца -
                            ' установили флаг выхода из цикла равным 16 (для внешнего цикла),
                            ' вышли из цикла
                iExitDo =  16 : Exit Do
            End If
            
            ' перенос значения ячейки HTML таблицы на лист Excel
            On Error Resume Next
            aCell.Offset(iRCopied, iCCopied).Value = Mid(sRow, z +  1 , z2 - z -  1 )
            If Err.Number <>  0  Then
            ' не удалось выгрузить очередное значение - сбросили ошибку,
            ' установили флаг выхода из цикла равным 32 (для внешнего цикла), вышли из цикла
                Err.Clear: iExitDo =  32 : Exit Do
            Else
                iCCopied = iCCopied +  1 
                z = InStr(z2 +  5 , sRow, "<TD")
                On Error GoTo  0 
            End If
        Loop    ' цикл по стоблцам
        
        If iExitDo Then     ' если флаг поднят (не найден закрывающий тэг столбца или ошибка при выгрузке на лист)
                            ' вышли из цикла (функции) с кодом iExitDo
            HtmlTableToSheet = iExitDo: Exit Do
        End If
        
        iRCopied = iRCopied +  1 
        k = InStr(k2 +  5 , s, "<TR")
    Loop    ' цикл по строкам
' ЗЫ: "по-взрослому" следовало бы прикрутить сюда регулярные выражения...
End Function

Sub proba_HtmlTableToSheet()
Dim s$, i%
' Ваша строка
    s = _
"</TH></TR>" & vbCrLf & _
"<TR>" & vbCrLf & _
"<TD>5</TD>" & vbCrLf & _
"<TD>5</TD>" & vbCrLf & _
"<TD>24 000</TD>" & vbCrLf & _
"<TD>27 000</TD>"
    
    s = s & "</TR>" ' <--наличие закрывающего тэга строки обязательно
    
    i = HtmlTableToSheet(ThisWorkbook.Worksheets( 1 ).Cells( 2 ,  2 ), s)
    
End Sub
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37231043
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, ' ЗЫ: "по-взрослому" следовало бы прикрутить сюда регулярные выражения...
в курсе, это Ваш конёк, завидую белой завистью
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37231125
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Option Explicit

Sub tt()
Dim str_, arr, arr2, str2
str_ = "</TH></TR>" & vbNewLine & "<TR>" & vbNewLine & "<TD>5</TD>" & vbNewLine & "<TD>5</TD>" & vbNewLine & "<TD>24 000</TD>" & vbNewLine & "<TD>27 000</TD>"
Debug.Print str_
str_ = Replace(str_, "</TH>", "")
str_ = Replace(str_, "</TR>", "")
str_ = Replace(str_, "</TD>", "")
str_ = Replace(str_, "<TR>", "")
str_ = Replace(str_, "<TD>", "")
str_ = Replace(str_, " ", "")
Debug.Print str_
arr = Split(str_, vbNewLine)
str2 = Application.Trim(Join(arr))
Debug.Print str2
arr2 = Split(str2)
[a1].Resize(UBound(arr2) +  1 ) = Application.Transpose(arr2)
End Sub
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37231134
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или чуть иначе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub ttt()
Dim str_, arr, arr2, str2
str_ = "</TH></TR>" & vbNewLine & "<TR>" & vbNewLine & "<TD>5</TD>" & vbNewLine & "<TD>5</TD>" & vbNewLine & "<TD>24 000</TD>" & vbNewLine & "<TD>27 000</TD>"
Debug.Print str_
str_ = Replace(str_, "</TH>", "")
str_ = Replace(str_, "</TR>", "")
str_ = Replace(str_, "</TD>", "")
str_ = Replace(str_, "<TR>", "")
str_ = Replace(str_, "<TD>", "")
str_ = Replace(str_, " ", "")
Debug.Print str_
str_ = Replace(str_, vbNewLine, " ")
Debug.Print str_
str2 = Application.Trim(str_)
arr = Split(str2)
[a1].Resize(UBound(arr) +  1 ) = Application.Transpose(arr)
End Sub

Но на RegExp было бы короче...
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37231170
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
хоть пробелы внутри ячеек пожалейте
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37231178
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заказчик сказал резать - значит резать :)
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37231185
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
заказчик плакался , что пробелы пропадают
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37231198
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скукотища, я исходил из
ggguueest не, надо получить
А1= 5
А2= 5
А3= 24000
А4= 27000
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37231200
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заказчик сказал резать - значит резать :)
...
Рейтинг: 0 / 0
парсинг web-страницы
    #37231655
ggguueest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мужики, всем спасибо, особенно биг респект ту скукотища - именно то, что нужно!
не разобрался пока как работает, но работает правильно! ну теперь-то я все трудности одолею.. ща подкручу немножко под свои нужды и... :)
СПАСИБО!!!!!!
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / парсинг web-страницы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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