Парсинг сайтов в 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
Да и просто подписывайтесь - люблю, когда растут цифры ;-)
Для меня, это одно из самых лучших и полезных видео по Excel. Павел, огромное Вам спасибо!
огромное спасибо за информацию
Наконец-то... Дождались!
В следующем видео в казино пойдем. На рулетку ;-)
Супер! Наконец-то понял что когда-то не зря в институте бейсик изучал
Весь день искал решение, в час ночи нашел))) завтра буду пробовать 👍👍👍
Ценно, ценно. Спасибо, Павел!
Супер огромное спасибо!!! Давно искал эту информацию.
Это просто перфекто! Спасибо огромнейшее)
не в тему конечно, но отпишусь:
за функцию спасибо, но меня больше радует позитивный настрой и улыбка на лице...
реальный эксель - реально поднимает настроение
спасибо
Спасибо! А я уж подумывал, что нужно позанудливее быть)
Круто, полезная штука!
Очередной топчик!!! Берегитесь сайты DOS атак ;)
DDOS
Круто, вот реально крутой контент лайк + подписка однозначно
Каааак же вовремя то!!!!
👍
Здравствуйте видео супер. Хочется что бы Вы развивали данную тему. Это будет и для Вас полезно. 1. Хотелось бы увидеть как парсить многостраничные сайты с разными конструкциями. 2. Что если макросы или функции делать более гибкими например адрес сайта не вбивать в код макроса а прописывать в ячейке и код будет брать его оттуда. Так же и с остальными параметрами.
Здесь я делюсь различными подходами и приемами, которые сам использую в своей практике. Конечно же будет здорово если мои видео натолкнут на еще более интересные решения!))
@@Pavel_Taranukha скажите пожалуйста то что я предлагаю насчет гибкости, это возможно реализовать?
Конечно можно)
Нужно просто вкурить объектную модель:
Книга - лист - ячейка.
Соответственно чтобы из макроса достучаться до ячейки а1 в Лист1 нужно написать:
Sheets("Лист1").Range("A1")
Или
Sheets("Лист1").Cells(1,1)
Круто, дружище! Просмотров не много ввиду специфической темы (это не сиски и котики), но не останавливайся!!! Благое дело делаешь!!
Вопрос как к гуру. Можно ли получить в immediate JSON ответ от запроса отсылая ссылку и несколько переменных?
Спасибо! Про json - Скорее всего можно, но у меня пока такой потребности не было и прямо сейчас нет готовых решений.
Добрый день. Я только начинаю изучать эту тему. Для меня не понятно. С чего начать? Подскажите пожалуйста
Подскажите пожалуйста, а можно это организовать не в экселе, а на сайте например. Внедрить туда выгрузку расстояния также, без всяких гугл и яндекс API ключей?
Добрый день. Спасибо за виде очень интересно и познавательно. Подскажите как сделать парсинг с сайта с тестами. Где надо сделать сбор вопросов и ответов верных и неверных. Спасибо
Добрый день!
На канале есть три способа парсинга. Нужно выбрать тот, который подойдет для вашего сайта.)
@@Pavel_Taranukha спасибо
У меня не работает выдает ошибку list separator or )? Прямо сначала решил все сделать как на видео и не получилось
а что если запрос на сайте не get, а post
Магия вне Хогвартса
Мои видео не смотрят маглы. Исключительно будущие или практикующие чародеи;-)
А почему не парить страницу через mshtml или msxml, и найти тег уже по id 🤔
Большое спасибо. Очень полезное видео.
Попробовал повторить по тому же сайту и все получилось, но когда делал тоже самое уже на другом сайте при выдаче вылетает какой то код. ">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().get".
Как можно с этим справиться?
Экспериментировать, искать варианты. Попытаться понять почему функция не возвращает тот код хтмл, который возвращает браузер. Возможно попробовать поработать через объект internet explorer. Возможно попробовать через гугл таблицы, через функцию importhtml - она клёвая))
здравствуйте. У меня почему-то ругается на Set oXMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
пишет Variable not defined
Просто скопировал ваш текст из описания видео, и вставил в модуль. В чем может быть проблема?
Доброго дня! Возможно требуется подключить библиотеку WinHttp.WinHttpRequest.5.1.
Для этого в VisualBasic нужно нажать меню Tools -> References и там найти нужную библиотеку.
Она скорее всего будет называться "Microsoft WinHttp Services, version 5.1"
Ставим на ней галку и жмем ОК.
Или попробуйте удалить строчку вверху: "Option Explicit"
Здравствуйте пытаюсь парсить через макрос (CreateObject("WinHttp.WinHttpRequest.5.1")), почему после post в .send { переменная из листа через range("a1")} не срабатывает
Отключите on error resume next и посмотрите какая ошибка вылетает. Нужно проверить какая строка передается и дает ли она нужный результат, будучи скопирована в строку адреса браузера.
а как данный код применить к парсингу интернет магазина? например вывести цену по штрихкоду?
Зависит от деталей: что за магазин, где взять штрихкод и пр... в ролике дается общий подход, но везде есть свои нюансы. Пробуйте и обязательно получится;)
Здравствуйте. У меня на макбуке не работает функция GetHTTPResponse. Не подскажите, пожалуйста, что в коде следует дописать? Спасибо!
Нет повести печальнее на свете чем макросы экселя на макбуке. Как, впрочем и сводные таблицы, и срезы, и другие новомодные фишки(
а можно ли поставить таймер на запросы? пробовал ставить .SetTimeouts перед .Open, но vba будто просто его игнорирует (
Долго искать, но вот здесь я таймер задержки использовал.
ruclips.net/video/KdlbvthMVvo/видео.html
У этого сайта же есть REST Api!
Не могу разобраться в чем проблема, сначала повторял шаг за шагом и при просчёте вылазила ошибка argument not optional, потом уже просто под чистую скопировал полностью Ваш код и теперь при запуске макроса вылазит ошибка invalide procedure call or argument. Подскажите, в чем может быть проблема?
Там где написано "неравно" напишите . Просто ютуб это не хотел пропускать.
@@user-ku9eq9vw9l часа полтора убил с перерывами, не работало, то меню vba project пропадет, то кириллица крякодяброй, то нормально вставляется (и в настройки региональных стандартов залезал) . пока не сверил с текстом в видео не получилось. адрес сайта по другому написан и в одной из строчек в тексте 2, а в видео 1. В конце все строчку km = Mid(текст, Начало, Конец) подсвечивало.
Я думал я один такой невежа пишу переменные на русском. А нет. Есть ещё такие как и я)
Нет, ну а для кого системы уже много лет кирилическую локализацию поддерживают. Невежды имя переменной ударом кулака по клавиатуре задают, а мы - славянофилы. Мы к кирилице с любовью и пиететом)))
Вы ещё и невежда, судя по употреблению в данном случае слова "невежа"...
При проверки функции GetHTTPResponse пишет о проблеме expected list separator or. В чем может быть ошибка?
Такая же проблема
И у меня та же история...нашли решение?
@@semenyukek да Гугл Таблицы importXML
@@semenyukek Когда ссылку вставляете, оберните ссылку в кавычки " "
@@user-fh5rh5rz7j спасибо саня
Парсер нашла этого юру на тиктокн там архив . спросила за что тайна Ханта и лайма погибли ? Жду ответа
Наверное я не все понял в вашем сообщении, но вам тоже всего хорошего и скорейшего получения всех ответов
@@Pavel_Taranukha много вопросов и никогда ини кому не желаю этой участи у самой хасюха
А вы переменные на русском языке всегда определяете?не глючит vba, не ругается временами?
Только если в игривом настроении. ВБА никогда по этому поводу не глючил. Всеяден, чертяка)
Punto Switcher по вам плачет сударь!
Это я от него плачу))) потому и не ставлю. Слишком много матерюсь я от него, сударь. Не сдежан'с
👍