Гид по технологиям

Как извлечь все ссылки с веб‑страницы с помощью PowerShell

4 min read Automation Обновлено 02 Dec 2025
Извлечь ссылки с веб‑страницы PowerShell
Извлечь ссылки с веб‑страницы PowerShell

Важно: соблюдайте правила сайта (robots.txt) и не перегружайте сервер частыми запросами.

Быстрые ссылки

  • Скрейпинг веба с PowerShell

Как извлечь ссылки с любой веб‑страницы с помощью PowerShell

Скрейпинг веба с PowerShell

Короткие определения:

  • Invoke‑WebRequest — cmdlet для получения и парсинга HTML‑страниц.
  • Invoke‑RestMethod — cmdlet для получения и парсинга JSON/XML API.

PowerShell 3 добавил удобные средства для автоматизации веб‑задач. Поскольку ссылки находятся в HTML, мы используем Invoke‑WebRequest. Простейшая команда для получения ответа от сайта выглядит так:

Invoke-WebRequest –Uri ‘http://howtogeek.com’

В результате вы получите объект ответа, у которого есть свойство Links — коллекция всех найденных ссылок (элементов a).

(Invoke-WebRequest –Uri ‘http://howtogeek.com’).Links

Эта коллекция содержит множество элементов. Используйте фильтры и перечисление членов для выбора нужных ссылок. Пример: получить все заголовки статей на главной странице:

((Invoke-WebRequest –Uri ‘http://howtogeek.com’).Links | Where-Object {$.href -like ‘http*’} | Where-Object {$.class -eq ‘title’}).Title

Пояснение шагов:

Список ссылок, полученный через Invoke-WebRequest

Пример: автоматическая загрузка изображения дня с National Geographic

Ниже пример, где мы находим ссылку «Download Wallpaper» и скачиваем файл через Start‑BitsTransfer. Обратите внимание на корректный синтаксис PowerShell:

$IOTD = ((Invoke-WebRequest -Uri ‘http://photography.nationalgeographic.com/photography/photo-of-the-day/‘).Links | Where-Object {$_.innerHTML -like ‘Download Wallpaper‘}).href

Start-BitsTransfer -Source $IOTD -Destination C:\IOTD\

Этот фрагмент:

  • ищет среди ссылок ту, где innerHTML содержит “Download Wallpaper”;
  • получает атрибут href;
  • скачивает файл в папку C:\IOTD\ через BITS.

Скриншот примера загрузки изображения дня

Полезные приёмы и рекомендации

  • Фильтрация по шаблонам: используйте -like и регулярные выражения (-match) для надежного отбора.
  • Приведение относительных URL: если href начинается с “/“, дополняйте базовым URI (Uri.TryCreate или [System.Uri] для объединения).
  • Параллельные загрузки: Start‑BitsTransfer поддерживает асинхронные операции; для массовых загрузок используйте лимит параллелизма.
  • Заголовки и куки: передавайте заголовки (Headers) или куки (Session) при необходимости для авторизованных страниц.

Когда такой подход не сработает

  • Контент формируется динамически JavaScript (SPA, AJAX) — Invoke‑WebRequest возвращает исходный HTML без отрисованного DOM.
  • Сайты с защитой от ботов (CAPTCHA, hCaptcha, Cloudflare) блокируют запросы.
  • Сложные клиентские взаимодействия (клики, ленивые загрузки) требуют браузерной автоматизации.

Альтернативные подходы

  • Selenium / Playwright — полноценная автоматизация браузера, подходит для JS‑генерируемого контента.
  • Headless браузеры (Chrome headless) — выполнить JavaScript и получить итоговый DOM.
  • curl/wget — для простых скачиваний и тестов; не умеют парсить DOM.
  • API сайта — предпочтительный вариант, если доступен официально.

Чек‑лист перед автоматизацией

  • Проверить robots.txt и правила сайта.
  • Оценить нагрузку и установить задержки между запросами.
  • Логировать ошибки и статус загрузки.
  • Обрабатывать относительные URL и ошибки 4xx/5xx.
  • Обеспечить корректную обработку кодировок (UTF‑8/Windows‑1251).

Отладка: типичные ошибки и решения

  • Пустой .Links — возможно, страница требует JS. Попробуйте Selenium.
  • Значения href как “#” или пустые — фильтровать условием Where-Object {$.href -and $.href -ne ‘#’}.
  • Ошибки сертификата — при необходимости укажите -SkipCertificateCheck для тестов (не рекомендуется в продакшене).

Критерии приёмки

  • Скрипт корректно получает список ссылок с целевой страницы.
  • Все целевые URL нормализованы (полные URL).
  • Нет падений при 4xx/5xx; логируются ошибки и повторные попытки для временных сбоев.
  • Размер и частота запросов не нарушают правила сайта.

Короткая методика (mini‑methodology)

  1. Оцените, доступен ли контент в исходном HTML.
  2. Напишите простой Invoke‑WebRequest и проверьте .Links.
  3. Отфильтруйте ссылки по href/class/innerHTML.
  4. Нормализуйте URL и скачайте ресурсы через Start‑BitsTransfer или Invoke‑WebRequest -OutFile.
  5. Добавьте логирование и обработку ошибок.

1‑строчный глоссарий

  • DOM — структура документа HTML; Invoke‑WebRequest пытается распарсить её на сервере.
  • BITS — Background Intelligent Transfer Service, удобен для надежных скачиваний.

Этические и юридические примечания

Важно: автоматизация должна уважать права владельцев контента и условия использования сайта. Если необходим доступ к большому объему данных, предпочтйтно запросить API или разрешение.

Итог

PowerShell делает базовый веб‑скрейпинг простым: Invoke‑WebRequest предоставляет разобранный DOM и коллекцию ссылок, которые можно фильтровать и обрабатывать стандартными средствами PowerShell. Для динамического контента используйте браузерную автоматизацию или официальные API.

Короткий список действий для начала:

  • Попробуйте Invoke‑WebRequest и просмотрите .Links;
  • Используйте Where‑Object для отбора по href/class/innerHTML;
  • Для скачивания применяйте Start‑BitsTransfer или Invoke‑WebRequest -OutFile;
  • При необходимости переходите на Selenium/Playwright для JS‑генерируемых страниц.

Задавайте вопросы или делитесь собственными трюками в комментариях.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство