尝试从网页中提取信息

时间:2018-10-12 19:48:28

标签: powershell html-object powershell-v6.0

我正在尝试从网站上提取数据。在我的示例案例中,我在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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

与PowerShell Core(v6.0)兼容的网络抓取代码,该代码也应与Windows PowerShell配合使用,并且依赖于regex with the -match operator(因为Core上没有ParsedHtml属性)

$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。