PowerShell でスクリーン スクレイピング コードをいくつか書きましたが、いくつかの HTML テーブルを解析するのに約 30 秒かかったことに驚きました。私はそれを取り除いて、すべての時間が費やされている場所を見つけようとしましたが、それはgetElementsByTagName
通話にあるようです.
以下に、自宅のデスクトップ、職場のデスクトップ、自宅のスレートの両方で、反復ごとに約 1 ~ 2 秒かかるスクリプトを含めました (完全な結果を以下に貼り付けます)。ただし、PowerShell コミュニティの他の人々は、はるかに短い時間 (反復ごとにわずか数ミリ秒) を報告しています。
問題を絞り込む方法を見つけるのに苦労していますが、OS/PS/.NET/IE のバージョンにはパターンがないようです。
私が現在実行しているデスクトップは、PS3 と .NET 4.5 (およびすべての Windows Update パッチ) のみがインストールされた、まったく新しい Windows 8 インストールです。ビジュアル スタジオはありません。PowerShell プロファイルがありません。
$url = "http://www.icy-veins.com/restoration-shaman-wow-pve-healing-gear-loot-best-in-slot"
$response = (iwr $url).ParsedHtml
# Loop through the h2 tags
$response.body.getElementsByTagName("h2") | foreach {
# Get the table that comes after the heading
$slotTable = $_.nextSibling
# Grab the rows from the table, skipping the first row (column headers)
measure-command { $rows = $slotTable.getElementsByTagName("tr") | select -Skip 1 } | select TotalMilliseconds
}
私のデスクトップからの結果 (仕事用 PC とスレートではほぼ同じ結果が得られます):
TotalMilliseconds
-----------------
1575.7633
2371.5566
1073.7552
2307.8844
1779.5518
1063.9977
1588.5112
1372.4927
1248.7245
1718.3555
3283.843
2931.1616
2557.8595
1230.5093
995.2934
ただし、Google+ PowerShell コミュニティの一部の人々は、次のような結果を報告しています。
TotalMilliseconds
-----------------
76.9098
112.6745
56.6522
140.5845
84.9599
48.6669
79.9283
73.4511
94.0683
81.4443
147.809
139.2805
111.4078
56.3881
41.3386
PowerShell ISE と標準コンソールの両方を試しましたが、違いはありません。行われている作業については、これらの時間はやや過剰に思えます。Google + コミュニティの投稿から判断すると、作業はより速く進む可能性があります。