1

昨年、私は 1 つのフェスティバル ページの HTML を解析する (そして Windows Phone アプリ用の XML を生成する) powershell (v3) スクリプトを作成しました。

私もそれについてここで質問していましたが、それは魅力のように機能しました.

しかし、今年スクリプトを実行すると、機能しません。具体的に言うと、メソッド getElemntsByClassName は何も返しません。他の Web ページでもその方法を試してみましたが、うまくいきませんでした。

昨年の私のコードは次のとおりです。現在は機能していません。

$tmpFile_bandInfo = "C:\band.txt"
Write-Host "Stahuji kapelu $($kap.Nazev) ..." -NoNewline    
Invoke-WebRequest http://www.colours.cz/ucinkujici/the-asteroids-galaxy-tour/ -OutFile $tmpFile_bandInfo
$content = gc $tmpFile_bandInfo -Encoding utf8 -raw
$ParsedHtml = New-Object -com "HTMLFILE"
$ParsedHtml.IHTMLDocument2_write($content)
$ParsedHtml.Close()
$bodyK = $ParsedHtml.body
$bodyK.getElementsByClassName("body four column page") # this returns NULL
$page = $page.item(0)
$aside = $page.getElementsByTagName("aside").item(0)
$img = $aside.getElementsByTagName("img").item(0)
$imgPath = $img.src

これは、これを回避するために使用したコードです。

$sec = $bodyK.getElementsByTagName("section") | ? ClassName -eq "body four column page"
# but now I have no innerHTML, only the lonely tag SECTION
# so I am walking through siblings
$img = $sec.nextSibling.nextSibling.nextSibling.getElementsByTagName("img").item(0)
$imgPath = $img.src

これは機能しますが、これは私にはばかげた解決策のようです。
誰が私が間違っているのか知っていますか?

4

2 に答える 2

2

コマンドレットを放棄し、 HtmlAgilityPackを採用することで、実際にこの問題を解決しました。Invoke-WebRequest

以前の順次 HTML 解析をいくつかの XPath クエリに変換しました (すべて powershell スクリプトのままでした)。このソリューションははるかに洗練されており、HtmlAgilityPack は非常に優れています ;) このようなプロジェクトで作業できることは本当に光栄です!

于 2014-08-06T14:58:39.057 に答える