Private/Get-VolkskrantArticle.ps1
function Get-VolkskrantArticle { param ( [Parameter(Mandatory)] [string]$Uri, [ScriptBlock]$UrlFilter = { $_ -like '*/nieuws-achtergrond/*' -or $_ -like '*/cultuur-media/*' } ) $DutchCulture = New-Object -TypeName System.Globalization.CultureInfo -ArgumentList 'nl-NL' Invoke-WebRequest -Uri $Uri ` | Select-Object -ExpandProperty Links ` | Select-Object -ExpandProperty HRef ` | Where-Object -FilterScript $UrlFilter | Where-Object { $_ -notlike '*copyright-auteursrechten-volkskrant*' } | Where-Object { $_ -notlike '*het-colofon-van-de-volkskrant*' } | ForEach-Object { $Url = $_ $Content = Invoke-WebRequest -Uri $Url | Select-Object -ExpandProperty Content $Document = ConvertTo-HtmlDocument -Text $Content $DateText = (($Document | Select-HtmlNode -XPath '//meta[@property="article:published_time"]').GetAttributeValue("content", "") -split 'T')[0] $Date = [DateTime]::ParseExact($DateText, 'yyyy\-MM\-dd', $DutchCulture) $Title = (($Document | Select-HtmlNode -CssSelector 'h1' -All).InnerText | ForEach-Object { $_.Trim() } | Where-Object { $_ }) -join ' ' $Paragraphs = $Document | Select-HtmlNode -CssSelector 'section' | Select-HtmlNode -CssSelector 'p' -All | Where-Object { $_.GetAttributeValue('class', '') -notin 'artstyle__container__text', 'z3lfzo5 z3lfzo6 _1iobnq21' } $Body = (($Paragraphs).InnerText | ForEach-Object { $_.Trim() } | Where-Object { $_ }) -join ' ' # Over de auteurThomas van Luyn is cabaretier, presentator en columnist voor Volkskrant Magazine. # Over de auteurThomas van Luyn is cabaretier, presentator en columnist voor Volkskrant Magazine. Columnisten hebben de vrijheid hun mening te geven en hoeven zich niet te houden aan de journalistieke regels voor objectiviteit. # <div class="_1ysxzgc0 _16a81gt0"><p class="z3lfzo5 z3lfzo6 _1iobnq21"><b>Over de auteur</b><br><a href="https://www.volkskrant.nl/columns/Sylvia-Witteman">Sylvia Witteman</a> schrijft voor <i>de Volkskrant </i>columns over het dagelijks leven.</p></div> # <div class="_1ysxzgc0 _16a81gt0"><p class="z3lfzo5 z3lfzo6 _1iobnq21"><b>Over de auteur</b><br><a href="https://www.volkskrant.nl/auteur/thomas-van-luyn" target="_blank">Thomas van Luyn</a> is cabaretier, presentator en columnist voor <i>Volkskrant Magazine</i>. Columnisten hebben de vrijheid hun mening te geven en hoeven zich niet te houden aan de journalistieke regels voor objectiviteit.</p></div> $Body = $Body -replace 'Over de auteur.*?Magazine\.\s*', '' $Body = $Body -replace 'Columnisten hebben de vrijheid hun mening te geven en hoeven zich niet te houden aan de journalistieke regels voor objectiviteit\.\s*', '' $Body = $Body -replace 'Geselecteerd door de redactie\.?\s*' [PSCustomObject][Ordered]@{ PSTypeName = 'UncommonSense.Volkskrant.Article' Url = $Url Date = $Date DateText = $DateText Title = $Title Body = $Body } } } |