Парсинг сайтов в Excel. Выкачиваем расстояния макросом VBA

Поделиться
HTML-код
  • Опубликовано: 8 май 2020
  • Настройка парсинга расстояний с сайта своими руками. Достаточно простенького макроса Excel чтобы получить желаемое.
    Function GetHTTPResponse(ByVal sURL As String) As String
    On Error Resume Next
    Set oXMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    With oXMLHTTP
    .Open "GET", sURL, False
    .send
    GetHTTPResponse = .responseText
    End With
    Set oXMLHTTP = Nothing
    End Function
    Function km(FromCity As String, ToCity As String)
    текст = GetHTTPResponse("www.avtodispetcher.ru/distanc..." & FromCity & "&to=" & ToCity)
    НачальныйТекст = "totalDistance"
    Начало = InStr(1, текст, НачальныйТекст) + Len(НачальныйТекст) + 2
    Подстрока = Mid(текст, Начало, 50)
    Конец = InStr(1, Подстрока, "/span") - 2
    km = Mid(текст, Начало, Конец)
    End Function
    Sub РасчетРасстояний()
    i = 2
    While Cells(i, 1) неравно ""
    Cells(i, 3) = km(Cells(i, 1), Cells(i, 2))
    i = i + 1
    Wend
    End Sub
    Хочется еще?
    Вот мой телеграмм канал: t.me/TrueExcel
    Контакт для связи: t.me/Pavel_Taranukha
    realxls
    dzen.ru/real_excel
    vc.ru/u/2288927-realnyy-eksel
    Да и просто подписывайтесь - люблю, когда растут цифры ;-)

Комментарии • 78

  • @user-rv8hk4uw9y
    @user-rv8hk4uw9y Год назад +1

    Для меня, это одно из самых лучших и полезных видео по Excel. Павел, огромное Вам спасибо!

  • @Magic-oc1jk
    @Magic-oc1jk 3 месяца назад

    огромное спасибо за информацию

  • @AlexConglomerate
    @AlexConglomerate 4 года назад +8

    Наконец-то... Дождались!

    • @Pavel_Taranukha
      @Pavel_Taranukha  4 года назад +1

      В следующем видео в казино пойдем. На рулетку ;-)

  • @kimWimp
    @kimWimp 2 года назад +1

    Супер! Наконец-то понял что когда-то не зря в институте бейсик изучал

  • @vitaliyivanov1477
    @vitaliyivanov1477 Год назад

    Весь день искал решение, в час ночи нашел))) завтра буду пробовать 👍👍👍

  • @user-kv4jq8mq3z
    @user-kv4jq8mq3z Год назад

    Ценно, ценно. Спасибо, Павел!

  • @vladimirkuzmenko3533
    @vladimirkuzmenko3533 3 года назад

    Супер огромное спасибо!!! Давно искал эту информацию.

  • @user-lc4uf9rc9s
    @user-lc4uf9rc9s Год назад

    Это просто перфекто! Спасибо огромнейшее)

  • @dncdncdncdnc8034
    @dncdncdncdnc8034 4 года назад +2

    не в тему конечно, но отпишусь:
    за функцию спасибо, но меня больше радует позитивный настрой и улыбка на лице...
    реальный эксель - реально поднимает настроение
    спасибо

    • @Pavel_Taranukha
      @Pavel_Taranukha  4 года назад

      Спасибо! А я уж подумывал, что нужно позанудливее быть)

  • @denispotapov9828
    @denispotapov9828 4 года назад +1

    Круто, полезная штука!

  • @1gr3k
    @1gr3k 4 года назад +1

    Очередной топчик!!! Берегитесь сайты DOS атак ;)

  • @user-gp5jw5gj1b
    @user-gp5jw5gj1b 3 года назад

    Круто, вот реально крутой контент лайк + подписка однозначно

  • @user-vp2ky7zz9z
    @user-vp2ky7zz9z Год назад

    Каааак же вовремя то!!!!

  • @user-gt7tq1sw8g
    @user-gt7tq1sw8g 4 года назад +1

    👍

  • @Stalin-dm9br
    @Stalin-dm9br 4 года назад +1

    Здравствуйте видео супер. Хочется что бы Вы развивали данную тему. Это будет и для Вас полезно. 1. Хотелось бы увидеть как парсить многостраничные сайты с разными конструкциями. 2. Что если макросы или функции делать более гибкими например адрес сайта не вбивать в код макроса а прописывать в ячейке и код будет брать его оттуда. Так же и с остальными параметрами.

    • @Pavel_Taranukha
      @Pavel_Taranukha  4 года назад

      Здесь я делюсь различными подходами и приемами, которые сам использую в своей практике. Конечно же будет здорово если мои видео натолкнут на еще более интересные решения!))

    • @Stalin-dm9br
      @Stalin-dm9br 4 года назад

      @@Pavel_Taranukha скажите пожалуйста то что я предлагаю насчет гибкости, это возможно реализовать?

    • @Pavel_Taranukha
      @Pavel_Taranukha  4 года назад

      Конечно можно)
      Нужно просто вкурить объектную модель:
      Книга - лист - ячейка.
      Соответственно чтобы из макроса достучаться до ячейки а1 в Лист1 нужно написать:
      Sheets("Лист1").Range("A1")
      Или
      Sheets("Лист1").Cells(1,1)

  • @alexandrabramov227
    @alexandrabramov227 3 года назад

    Круто, дружище! Просмотров не много ввиду специфической темы (это не сиски и котики), но не останавливайся!!! Благое дело делаешь!!
    Вопрос как к гуру. Можно ли получить в immediate JSON ответ от запроса отсылая ссылку и несколько переменных?

    • @Pavel_Taranukha
      @Pavel_Taranukha  3 года назад +1

      Спасибо! Про json - Скорее всего можно, но у меня пока такой потребности не было и прямо сейчас нет готовых решений.

  • @user-sc5yk5wk3x
    @user-sc5yk5wk3x 3 года назад +1

    Добрый день. Я только начинаю изучать эту тему. Для меня не понятно. С чего начать? Подскажите пожалуйста

  • @user-ju2yq8wd6g
    @user-ju2yq8wd6g 6 месяцев назад

    Подскажите пожалуйста, а можно это организовать не в экселе, а на сайте например. Внедрить туда выгрузку расстояния также, без всяких гугл и яндекс API ключей?

  • @user-sc5yk5wk3x
    @user-sc5yk5wk3x 3 года назад +1

    Добрый день. Спасибо за виде очень интересно и познавательно. Подскажите как сделать парсинг с сайта с тестами. Где надо сделать сбор вопросов и ответов верных и неверных. Спасибо

    • @Pavel_Taranukha
      @Pavel_Taranukha  3 года назад

      Добрый день!
      На канале есть три способа парсинга. Нужно выбрать тот, который подойдет для вашего сайта.)

    • @user-sc5yk5wk3x
      @user-sc5yk5wk3x 3 года назад

      @@Pavel_Taranukha спасибо

  • @user-vf1cj9wk1n
    @user-vf1cj9wk1n 10 месяцев назад

    У меня не работает выдает ошибку list separator or )? Прямо сначала решил все сделать как на видео и не получилось

  • @umrbekmatrasulov4141
    @umrbekmatrasulov4141 3 года назад +1

    а что если запрос на сайте не get, а post

  • @yoQkee
    @yoQkee 3 года назад

    Магия вне Хогвартса

    • @Pavel_Taranukha
      @Pavel_Taranukha  3 года назад

      Мои видео не смотрят маглы. Исключительно будущие или практикующие чародеи;-)

  • @user-bh2ot5ks8f
    @user-bh2ot5ks8f 11 месяцев назад

    А почему не парить страницу через mshtml или msxml, и найти тег уже по id 🤔

  • @user-pk7lg1tw2p
    @user-pk7lg1tw2p 3 года назад

    Большое спасибо. Очень полезное видео.
    Попробовал повторить по тому же сайту и все получилось, но когда делал тоже самое уже на другом сайте при выдаче вылетает какой то код. ">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().get".
    Как можно с этим справиться?

    • @Pavel_Taranukha
      @Pavel_Taranukha  3 года назад

      Экспериментировать, искать варианты. Попытаться понять почему функция не возвращает тот код хтмл, который возвращает браузер. Возможно попробовать поработать через объект internet explorer. Возможно попробовать через гугл таблицы, через функцию importhtml - она клёвая))

  • @Kilotki
    @Kilotki 4 года назад +1

    здравствуйте. У меня почему-то ругается на Set oXMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    пишет Variable not defined
    Просто скопировал ваш текст из описания видео, и вставил в модуль. В чем может быть проблема?

    • @Pavel_Taranukha
      @Pavel_Taranukha  4 года назад +1

      Доброго дня! Возможно требуется подключить библиотеку WinHttp.WinHttpRequest.5.1.
      Для этого в VisualBasic нужно нажать меню Tools -> References и там найти нужную библиотеку.
      Она скорее всего будет называться "Microsoft WinHttp Services, version 5.1"
      Ставим на ней галку и жмем ОК.

    • @user-rv8hk4uw9y
      @user-rv8hk4uw9y Год назад

      Или попробуйте удалить строчку вверху: "Option Explicit"

  • @user-dx7mf8ky1u
    @user-dx7mf8ky1u 4 года назад

    Здравствуйте пытаюсь парсить через макрос (CreateObject("WinHttp.WinHttpRequest.5.1")), почему после post в .send { переменная из листа через range("a1")} не срабатывает

    • @Pavel_Taranukha
      @Pavel_Taranukha  4 года назад

      Отключите on error resume next и посмотрите какая ошибка вылетает. Нужно проверить какая строка передается и дает ли она нужный результат, будучи скопирована в строку адреса браузера.

  • @makss734
    @makss734 4 года назад

    а как данный код применить к парсингу интернет магазина? например вывести цену по штрихкоду?

    • @Pavel_Taranukha
      @Pavel_Taranukha  4 года назад

      Зависит от деталей: что за магазин, где взять штрихкод и пр... в ролике дается общий подход, но везде есть свои нюансы. Пробуйте и обязательно получится;)

  • @mr.brightside_21
    @mr.brightside_21 3 года назад

    Здравствуйте. У меня на макбуке не работает функция GetHTTPResponse. Не подскажите, пожалуйста, что в коде следует дописать? Спасибо!

    • @Pavel_Taranukha
      @Pavel_Taranukha  3 года назад

      Нет повести печальнее на свете чем макросы экселя на макбуке. Как, впрочем и сводные таблицы, и срезы, и другие новомодные фишки(

  • @bohdankuhar7763
    @bohdankuhar7763 Год назад

    а можно ли поставить таймер на запросы? пробовал ставить .SetTimeouts перед .Open, но vba будто просто его игнорирует (

    • @Pavel_Taranukha
      @Pavel_Taranukha  Год назад

      Долго искать, но вот здесь я таймер задержки использовал.
      ruclips.net/video/KdlbvthMVvo/видео.html

  • @user-qp2ll3kn4q
    @user-qp2ll3kn4q 2 года назад

    У этого сайта же есть REST Api!

  • @Ghost11237
    @Ghost11237 4 года назад

    Не могу разобраться в чем проблема, сначала повторял шаг за шагом и при просчёте вылазила ошибка argument not optional, потом уже просто под чистую скопировал полностью Ваш код и теперь при запуске макроса вылазит ошибка invalide procedure call or argument. Подскажите, в чем может быть проблема?

    • @user-ku9eq9vw9l
      @user-ku9eq9vw9l 4 года назад

      Там где написано "неравно" напишите . Просто ютуб это не хотел пропускать.

    • @fdeghb4418
      @fdeghb4418 2 года назад

      @@user-ku9eq9vw9l часа полтора убил с перерывами, не работало, то меню vba project пропадет, то кириллица крякодяброй, то нормально вставляется (и в настройки региональных стандартов залезал) . пока не сверил с текстом в видео не получилось. адрес сайта по другому написан и в одной из строчек в тексте 2, а в видео 1. В конце все строчку km = Mid(текст, Начало, Конец) подсвечивало.

  • @Tom_2106
    @Tom_2106 3 года назад

    Я думал я один такой невежа пишу переменные на русском. А нет. Есть ещё такие как и я)

    • @Pavel_Taranukha
      @Pavel_Taranukha  3 года назад +2

      Нет, ну а для кого системы уже много лет кирилическую локализацию поддерживают. Невежды имя переменной ударом кулака по клавиатуре задают, а мы - славянофилы. Мы к кирилице с любовью и пиететом)))

    • @SV-13
      @SV-13 10 месяцев назад

      Вы ещё и невежда, судя по употреблению в данном случае слова "невежа"...

  • @user-zf5nj3jc4u
    @user-zf5nj3jc4u 3 года назад +1

    При проверки функции GetHTTPResponse пишет о проблеме expected list separator or. В чем может быть ошибка?

    • @MrDjoniJoker
      @MrDjoniJoker 3 года назад +1

      Такая же проблема

    • @semenyukek
      @semenyukek 3 года назад +1

      И у меня та же история...нашли решение?

    • @MrDjoniJoker
      @MrDjoniJoker 3 года назад

      @@semenyukek да Гугл Таблицы importXML

    • @user-fh5rh5rz7j
      @user-fh5rh5rz7j 3 года назад +2

      @@semenyukek Когда ссылку вставляете, оберните ссылку в кавычки " "

    • @bettupa3222
      @bettupa3222 3 года назад

      @@user-fh5rh5rz7j спасибо саня

  • @user-nw5lu1kg1n
    @user-nw5lu1kg1n 3 года назад

    Парсер нашла этого юру на тиктокн там архив . спросила за что тайна Ханта и лайма погибли ? Жду ответа

    • @Pavel_Taranukha
      @Pavel_Taranukha  3 года назад

      Наверное я не все понял в вашем сообщении, но вам тоже всего хорошего и скорейшего получения всех ответов

    • @user-nw5lu1kg1n
      @user-nw5lu1kg1n 3 года назад

      @@Pavel_Taranukha много вопросов и никогда ини кому не желаю этой участи у самой хасюха

  • @maxedison9222
    @maxedison9222 29 дней назад

    А вы переменные на русском языке всегда определяете?не глючит vba, не ругается временами?

    • @Pavel_Taranukha
      @Pavel_Taranukha  29 дней назад +1

      Только если в игривом настроении. ВБА никогда по этому поводу не глючил. Всеяден, чертяка)

  • @FormAlDeGid
    @FormAlDeGid 2 года назад

    Punto Switcher по вам плачет сударь!

    • @Pavel_Taranukha
      @Pavel_Taranukha  2 года назад

      Это я от него плачу))) потому и не ставлю. Слишком много матерюсь я от него, сударь. Не сдежан'с

  • @user-jw1if1lg4u
    @user-jw1if1lg4u 3 года назад

    👍