Попытка получить информацию с веб-страницы
Я пытаюсь получить данные с веб-сайта. В моем примере я выполняю поиск на Armorgames.com по поисковому запросу в режиме ожидания. Оттуда я хотел бы вытащить название каждой игры и поместить его в CSV-файл для последующего использования. Мой код:
$SearchResult = Invoke-WebRequest 'http://armorgames.com/search?type=games&q=idle'
($SearchResult.ParsedHtml.getElementsByTagName('H5') | Where { $_.pathname -like '/play*'})
К сожалению, это не даст никаких результатов. Я могу увидеть имена свойств, используя:
$SearchResult.ParsedHtml.getElementsByTagName('H5')
Используя тег 'a', я могу найти игры с путем, содержащим 'play'. Но у меня возникают проблемы с фильтрацией результатов, а затем выводом результатов в файл
2 ответа
Совместимый с PowerShell Core (v6.0) веб-код, который должен работать и с Windows PowerShell, опираясь на регулярное выражение с оператором -match (как ParsedHtml
свойство недоступно в Core):
$SearchResult = Invoke-WebRequest 'http://armorgames.com/search?type=games&q=idle'
$GameNames = ($SearchResult.Content.split('<') |
where {$_ -match '^a href.*play.*\ title=.*>[A-Z].*'}) -replace '.*>'
$GameNames
Вывод выглядит так:
Artist Idle
Hero Simulator: Idle Adventures
Idle Farmer
Idle Online Universe
Idle Sword
Idle Web Tycoon
Legendary Journey Idle
NGU IDLE
Religious Idle
Zombidle
Теперь, когда у вас есть массив имен, которые вы хотели, вы сможете создавать CSV с любой дополнительной информацией, которая вам нужна.
$SearchResult.ParsedHtml.getElementsByTagName('a') | where-Object -Property pathname -Like 'play/*'
# select property pathname
$SearchResult.ParsedHtml.getElementsByTagName('a') |
Where-Object -Property pathname -Like 'play/*' |
Select-Object -Property pathname
# select property title
$SearchResult.ParsedHtml.getElementsByTagName('a') |
Where-Object -Property pathname -Like 'play/*' |
Select-Object -Property title -Unique