Страницы: 1
RSS
парсинг сайта, как прописать правильно адрес
 
Добрый день, скажите пожалуйста как то можно узнать данные с сайта и прописать их для парсинга всех тиражей со страницы http://www.marathontotoservice.com/sttot/pbstyle/sttot.aspx

сейчас я делаю это так:
захожу на страницу http://www.marathontotoservice.com/sttot/pbstyle/tot_detail.aspx?id=-9026&GMT=+3 перехожу по ссылке внизу Табло матчей http://www.marathontotoservice.com/sttot/pbstyle/SttotTime.aspx?id=-9026&GMT=+3 и эту страницу вставляю в эксель
потом делаю тоже самое в ручную http://www.marathontotoservice.com/sttot/pbstyle/SttotTime.aspx?id=-9023&GMT=+3 но страница уже другая

получается идет изменение в номере -9023&, отсюда вопросы как получить все номера тиражей со страницы? и сделать так чтобы данные записывались в строчку  горизонтально как на странице  итог
 
можно так
Код
Sub test2()
    Dim url, ss, p, u, i, tir, j, ri
    Dim t, El, StrArr() As String, s1, s2
    Dim htm
    
    Set htm = CreateObject("htmlfile")
    For j = 9026 To 1 Step -1
        s1 = "": s2 = ""
        url = "http://www.marathontotoservice.com/sttot/pbstyle/SttotTime.aspx?id=-" & j & "&GMT=+3"
        ss = GetHTTPResponse_P(url)
        If InStr(1, ss, "Тираж №") > 0 Then
            tir = Split(Split(ss, "Тираж №")(1), ",")(0)
            htm.body.innerhtml = ss
            For Each El In htm.getElementsByTagName("TR")
            If InStr(1, El.innerhtml, "TEXT-ALIGN") > 0 Then
                If InStr(1, El.innerhtml, ">Дата<") = 0 Then
                    u = Split(El.innerhtml, vbCrLf)
                    t = Split(Split(u(1), ">")(1), "<")(0)
                    s1 = IIf(Len(s1) = 0, t, s1 & "," & t)
                    t = Split(Split(u(3), ">")(1), "<")(0)
                    s2 = IIf(Len(s2) = 0, t, s2 & "," & t)
                End If
            End If
            Next El
            ri = ri + 1
            Cells(ri, 1) = "Тираж №" & tir
            Cells(ri, 2).Resize(, 15) = Split(s1, ",")
            Cells(ri, 18).Resize(, 15) = Split(s2, ",")
            Cells(ri, 35) = j
        End If
        DoEvents
    Next j
End Sub

Private Function GetHTTPResponse_P(ByVal sURL As String) As String
    Dim oXMLHTTP
     On Error Resume Next
     Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
     With oXMLHTTP
        .Open "GET", sURL, False
        .send
         GetHTTPResponse_P = .responseText
     End With
     Set oXMLHTTP = Nothing
End Function
 
Спасибо за ответ, но почему то когда вставляю Ваш код в макрос, получается ошибка в строке

Код
url = "http://www.marathontotoservice.com/sttot/pbstyle/SttotTime.aspx?id=-&quot; & j & "&GMT=+3"

выделена красным, можно Вас попросить добавить код в начальный файл?
 
Ссылку движок форума исказил
Так должно быть
"http://www.marathontotoservice.com/sttot/pbstyle/SttotTime.aspx?id=-" & j & "&GMT=+3"
 
Спасибо, теперь ошибок нет, запустил макрос, там похоже на не сколько часов, можно спокойно заниматься своими рабочими делами.
 
Макрос заполнил только номера тиражей, а дальше не стал записывать исходы, что то сделал не так?
 
Держите
 
Огромное Вам спасибо, тебе все получилось.
 
Все таки не смог сам до конца сделать что мне нужно, создал тему в платной ветке, может Вы сможете помочь https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=7&TID=148384&TITLE_SEO=148384-dodelat-makros-_parser-sayta&MID=1191885&result=new#message1191885 ?
 
Добрый день, скажите пожалуйста можно как то добавить в парсер чтобы он парсел не все по новой, а только новые данные вносил вверху странице, к примеру сейчас у меня есть данные от 04.05.2022 мне нужно добавить два дня, 05.06.2022 и 07.05.2022.

Код
Sub test2()
    Dim url, ss, p, u, i, tir, j, ri
    Dim t, El, StrArr() As String, s1, s2
    Dim htm
    ri = 1
    Start = 0
    Set htm = CreateObject("htmlfile")
    For j = 9134 To 1 Step -1
        s1 = "": s2 = ""
        url = "http://www.marathontotoservice.com/sttot/pbstyle/SttotTime.aspx?id=-" & j & "&GMT=+3"
        ss = GetHTTPResponse_P(url)
        If InStr(1, ss, "Тираж №") > 0 Then
            tir = Split(Split(ss, "Тираж №")(1), ",")(0)
            htm.body.innerhtml = ss
            p = 0
            For Each El In htm.getElementsByTagName("TR")
                If p > 0 Or Start = 0 Then
                    For i = 0 To El.Cells.Length - 1
                        If El.Cells(i).innertext = "" Then ri = ri - 1: Exit For
                        Cells(ri, i + 1) = El.Cells(i).innertext
                    Next
                    ri = ri + 1
                End If
                p = p + 1
            Next El
            Start = 1
        End If
        DoEvents
    Next j
End Sub

Private Function GetHTTPResponse_P(ByVal sURL As String) As String
    Dim oXMLHTTP
    On Error Resume Next
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    With oXMLHTTP
        .Open "GET", sURL, False
        .send
        GetHTTPResponse_P = .responseText
    End With
    Set oXMLHTTP = Nothing
End Function
 
Код
For j = 9134 To 1 Step -1
с 9134 тиража до 1 в обратном порядке
с 100 тиража до 90 в обратном порядке. тиражи с 90 по 100
сложно самому поставить номера тиражей?
 
Добрый день, хотел получить данные с этого сайта http://www.marathontotoservice.com/sttot/pbstyle/SttotTime16.aspx?id=-9723&GMT=+3

но вся структура рушится.

Нужны только эти колонки:
- Дата GMT +3
- №
- Cобытие
- Результат
 
Код
let
    Источник = Web.Page(Web.Contents("http://www.marathontotoservice.com/sttot/pbstyle/SttotTime16.aspx?id=-9723&GMT=+3")),
    Data0 = Источник{0}[Data],
    #"Другие удаленные столбцы" = Table.SelectColumns(Data0,{"", "2", "3", "4"}),
    #"Повышенные заголовки" = Table.PromoteHeaders(#"Другие удаленные столбцы", [PromoteAllScalars=true]),
    #"Строки с примененным фильтром" = Table.SelectRows(#"Повышенные заголовки", each ([#"№"] <> "№"))
in
    #"Строки с примененным фильтром"
 
Nilske все получилось, но на один тираж, а если я хочу получить всю историю, то я заменяю ссылку
Код
("http://www.marathontotoservice.com/sttot/pbstyle/SttotTime16.aspx?id=-9723&GMT=+3"))
на
Код
"http://www.marathontotoservice.com/sttot/pbstyle/SttotTime16.aspx?id=-" & j & "GMT=+3"
выдает ошибку
Код
Expression.Error: Имя "j" не распознано. Убедитесь в том, что оно написано верно. 
 
Цитата
написал:
"GMT=+3"
замените на
Код
"&GMT=+3"
 
Апострофф не помогло
Код
= Web.Page(Web.Contents("http://www.marathontotoservice.com/sttot/pbstyle/SttotTime16.aspx?id=-"& j &"&GMT=+3"))
 
DJMC, не экономьте на пробелах, когда & используется как конкатенатор
Код
= Web.Page(Web.Contents("http://www.marathontotoservice.com/sttot/pbstyle/SttotTime16.aspx?id=-" & j & "&GMT=+3"))
 
Апострофф файл во вложении, что опять не так сделал, не понимаю  :cry:
 
Power Query
Код
let
    Source = Excel.Workbook(File.Contents("C:\Users\seven\Documents\Documents\парсер загатовка.xlsx"), null, true),
    #"Removed Bottom Rows" = Table.RemoveLastN(Source,5),
    #"Removed Other Columns" = Table.SelectColumns(#"Removed Bottom Rows",{"Name", "Data"}),
    #"Expanded Data" = Table.ExpandTableColumn(#"Removed Other Columns", "Data", {"Column1", "Column2"}, {"Data.Column1", "Data.Column2"}),
    #"Promoted Headers" = Table.PromoteHeaders(#"Expanded Data", [PromoteAllScalars=true]),
    #"Renamed Columns" = Table.RenameColumns(#"Promoted Headers",{{"№", "number"}}),
    #"Removed Columns" = Table.RemoveColumns(#"Renamed Columns",{"Результат"}),
    #"Filtered Rows" = Table.SelectRows(#"Removed Columns", each ([number] <> "№")),
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"Тираж №2849"}, {{"Count", each _, type table}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each [Count][number]),
    #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"Count"}),
    #"Extracted Values" = Table.TransformColumns(#"Removed Columns1", {"Custom", each Text.Combine(List.Transform(_, Text.From), " "), type text}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values","Custom",Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv),{"Custom.1", "Custom.2", "Custom.3", "Custom.4", "Custom.5", "Custom.6", "Custom.7", "Custom.8", "Custom.9", "Custom.10", "Custom.11", "Custom.12", "Custom.13", "Custom.14", "Custom.15"}),
    #"Renamed Columns1" = Table.RenameColumns(#"Split Column by Delimiter",{{"Тираж №2849", "Тираж"}})
in
    #"Renamed Columns1"
 
jakim почему-то только два тиража загружаются из всего списка, и ссылка идет на  http://www.marathontotoservice.com/sttot/pbstyle/sttot.aspx  а мне нужна ссылка на http://www.marathontotoservice.com/sttot/pbstyle/sttot16.aspx?GMT=+3# это разные тиражи в первом случае там 15 игр, во втором случае 8 игр.
 
Добрый день, что то совсем перестал работать парсер, загружает не понятно что... кто то может подсказать что сломалось в нем?
Страницы: 1
Наверх