我正在尝试从网站中提取数据。 在我的示例中,我正在 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"的游戏。但是我在过滤结果然后将结果输出到文件中时遇到问题
$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
兼容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。