Смотрелка - Браузер, если по-нашему, по айтишному.
А началось все... с Initial.D: читать дальше
Что-то вспомнился мне этот диалог, решил, что надо бы эту задачу расколоть.
Исследуем выдачу от Mail.ru. Все ссылки не прямые, а ведущие на отдельные страницы, уже с которых можно вытащить ссылку на сами файлы. Следовательно, вариант, который я использовал в прошлый раз, отпадает. Придется как-то ходить по ссылкам из выдачи поисковика.
Ключевой момент - как можно в Powershell пойти куда-то в вебе в режиме смотрелки? Правильно, "оседлать" смотрелку!
Вот вокруг этого скрипт и будет крутиться. Погнали!
А теперь по складам.
Первый блок ничем не примечателен, обычное объявление объектов да одной переменной. Во втором уже любопытнее, происходит, собственно "автоматизация смотрелки". Мы скармливаем подопытному браузеру исходную ссылку, заставляем его перейти по ней, вытаскиваем из исходного кода этой страницы все элементы типа "якорь", а затем при помощи
Дальнейшее уже является повторением ранее изученного. В цикле та же автоматизация смотрелок плюс "хитрая магия" плюс загрузка файла при помощи wget.
Отдельно стоит сказать по зубодробительной конструкции
@([System.__ComObject].InvokeMember(“getElementsByTagName”,[System.Reflection.BindingFlags]::InvokeMethod, $null, $ie.document, 'A'))
которая все якоря из исходника и выбирает. Вообще есть более изящное $ie.document.GetElementsByTagName('A'), но, как выяснилось, у нее есть большие проблемы с разными версиями IE. В актуальных для Windows 7, это не работает, потому пришлось идти через запасной ход.
C хэш-таблицей тоже все весело. Изначально я вообще не планировал ее использовать, ибо зачем плодить сущности. Хотелось в переменную $elements загнать непосредственно то, что будет отдано парсером GetElementsByTagName. Не тут-то было. Парсер эти данные отдал, но как только дело доходило до третьего блока, который уже загружал отдельные страницы, переменная $elements теряла все значения. Не коллекцию элементов, а именно значения. И, естественно, третий блок валился с ошибкой и многими строками красного текста, ненавистного большинству повершелльщиков. Пришлось отделить мух от котлет, после этого все заработало.
А засада этого скрипта в том, что на его отладку было потрачено больше времени, чем на ручное скачивание всех этих 40+ файлов. Ну и ладно, зато плюс одна любопытная задачка в активе
P.S> Но насколько же неторопливо идет парсинг кода при помощи GetElementsByTagName...
UPD. В топку internetexplorer.application, Invoke-WebRequest же!
Важно! - из &_amp нужно убрать символ подчеркивания, парсер - нехороший человек.