Нужно получить данные с веб-сайта... веб-запрос? макрос?
У меня есть список всех DOT # (отдел транс.) В стране. Я хочу узнать дату вступления в силу страхования для каждой из этих компаний. Если вы перейдете на http://li-public.fmcsa.dot.gov/ -> "continue" ->, то в раскрывающемся списке выберите "поиск оператора" и нажмите "go", и вы попадете в форму поиска (это единственный способ добраться до этого экрана).
Оттуда вы можете ввести DOT # X (используйте 61222 в качестве примера), и он выведет вас на другой экран. Нажмите "просмотреть отчет в HTML", а затем внизу вы увидите "Активное / ожидающее страхование". Я хочу вывести "дату вступления в силу" с этой страницы и вставить ее в электронную таблицу рядом с ТОЧКОЙ № X, которую я уже знаю.
Из тысяч DOT # в моем списке, не все будут иметь регистрации на этом сайте, если это имеет значение.
Можно ли это сделать с помощью веб-запроса Macro или Excel? Я знаю, что, похоже, я начинающий, но буду признателен за любую помощь.
Спасибо
2 ответа
Ты можешь сделать это? Честно говоря, даже если бы вы могли заблокировать электронную таблицу во время ее обработки. И в конце концов, как бы вы справились с ошибкой на полпути?
Я бы не стал делать это в клиентском приложении. Это больше похоже на то, что нужно делать в серверном приложении, которое может выполнять обработку и собирать информацию в более контролируемой среде. Тогда ваша электронная таблица Excel может запросить это приложение и получить информацию одним махом. Обработка ошибок намного проще, и вы не сидите и не смотрите на Excel, почему он работает через тысячи веб-сайтов. Он был построен не для того, чтобы делать это элегантно.
Что вы пишете в веб-сервисе, который я описываю? Ну, это зависит от ваших предпочтений. Я бы написал это на Ruby on Rails, так как он легко справляется с задачей очистки и может легко сообщать данные. Но это действительно сводится к тому, что вы наиболее комфортно кодируете.
Вы определенно можете сделать это; но Excel не лучший инструмент для анализа (хотя я это сделал! и люди сказали, что это невозможно - это можно сделать с помощью асинхронных вызовов Windows API; удачи во всем этом...)
Первый вопрос, который вы должны задать, - это динамический сайт или нет. Это дает результаты на лету? Другой вопрос: является ли это соглашение об URL-адресах последовательным? (Другими словами: можете ли вы добавить в закладки результаты и вернуться к ним в другом сеансе, не делая ничего, кроме как войти на сайт...)
Если сайт статичен или имеет согласованный механизм URL-запросов (мы говорим в HTML: веб-запрос является "GET", а не формой "POST"...), вы можете использовать хороший ориентированный на синтаксический анализатор язык, такой как Python. использование библиотеки для доступа к веб-страницам; примеров в Google должно быть предостаточно. После того, как вы отлаживаете все это и оно работает надежно (также проверьте, что оно интеллектуально сообщает ситуацию, когда вы не можете попасть на сайт; временно разорвите сетевое соединение для этого...), из макроса Excel вы можете выполнить оболочку скрипт Python. Хитрость в том, что ванильный обстрел в Excel не блокирует вашу команду обстрела, а работает асинхронно. Таким образом, снова используя Google, вы можете найти вызов Windows API, который вы можете сделать из Excel, чтобы синхронно обработать вашу задачу поиска (если вы не блокировали ее до тех пор, пока она не была завершена, ваш следующий макрос-код, ожидающий анализа результатов, не найдет там ничего!) Ваш код синтаксического анализа Python может генерировать текстовый файл с разделителями табуляции, который может легко загрузить ваш макрос.
Видите смысл этого дизайна? МОДУЛЬНАЯ. Если в вашем разборе есть ошибка, это гораздо легче определить, просто посмотрев на CSV. И вы используете специализацию: вы используете язык программирования, который предназначен для синтаксического анализа (Python, что угодно...); VBA на самом деле не является языком синтаксического анализа.
Что если это не статические веб-страницы, а динамические, которые требуют создания уникальных записей? Затем, помимо выполнения вызовов с помощью bizarro Windows API из макроса Excel, вы можете создать сценарий динамического анализа, используя либо Greasemonkey, либо C#. Greasemonkey - это плагин для Firefox, который позволяет вам создавать сценарии взаимодействия с веб-сайтом с помощью Javascript. Это довольно интуитивно понятно. Если вы воспользовались этим подходом, вы могли бы подключиться к браузеру Firefox для той страницы, на которой сконфигурирован ваш предопределенный скрипт Greasemonkey. Опять же, Greasemonkey может сгенерировать текстовый файл данных, и его легко отладить позже. Другой вариант, который я слышу, это C#; Я никогда не пробовал этого, поскольку это специфично для Microsoft, но я вижу, что многие магазины так делают. Существует также пакет синтаксического анализа Java под названием HTMLunit, но я обнаружил, что он сломался при попытке эмулировать события Javascript на веб-странице. Другие парсеры HTML, на которые вы можете посмотреть - это Джерри и Кобра; и есть этот новый продукт под названием Selenium. Я нашел Greasemonkey, чтобы быть самым надежным, так как он использует реальный браузер для работы; в то время как, за исключением Selenium, эти другие продукты делают виртуальные копии браузеров, и, к сожалению, часто этого не делают. Некоторые даже не удосуживаются копировать Javascripts, который может быть на веб-странице (которая часто может быть мясом и картофелем того, как отображается страница веб-сайта!)
Повеселись. Это глубокий конец пула, но тот, который будет держать вас занятым и выгодно занятым.