1

我正在尝试从网站中提取数据。在我的示例中,我正在 Armorgames.com 上搜索搜索词 idle。从那里我想提取每个游戏的名称并将其放入 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”的游戏。但我无法过滤结果,然后将结果输出到文件

4

2 回答 2

0

PowerShell Core (v6.0) 兼容的 webscraping 代码,它也应该与 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。

于 2018-10-15T22:33:56.767 回答
0
$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
于 2018-10-12T20:16:16.860 回答