HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(content);
var nodes = doc.DocumentNode.SelectNodes("//div[@class=\"noprint res\"]/div");
if (nodes != null)
{
foreach (HtmlNode data in nodes)
{
// Works but not what I want
MessageBox.Show(data.InnerHtml);
// Should work ? but does not ?
MessageBox.Show(data.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);
}
}
foreachの初期ノードであるHTMLの結果を解析しようとしていますが、期待どおりに機能し、必要なものと一致する10個のアイテムの結果が得られます。
foreachに入ると、データ項目の内部htmlを出力すると正しいデータが表示されますが、SelectSingleNodeを出力すると、常にforeachの最初の項目のデータが表示されます。これは正常な動作ですか。何か間違ったことをしていますか?
この問題を解決するために、次のようなすべてのデータ項目のforeach内に新しいhtmlを作成する必要がありました。
HtmlAgilityPack.HtmlDocument innerDoc = new HtmlAgilityPack.HtmlDocument();
innerDoc.LoadHtml(data.InnerHtml);
// Select what I need
MessageBox.Show(innerDoc.DocumentNode.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);
次に、アイテムごとの正しいデータを取得します。
私がデータを取得しようとしていたページはhttp://maps.google.com/maps?q=consulting+loc:+USでした。
基本的に私は会社名の左側の列を読んでいます、そして上記は起こります。