質問: doc.DocumentNode.SelectSingleNode("/html[1]/body[1]/div[3]/div[1]/table[1]/tbody[1]/tr[3]/td[1]/table[1]/tbody[1]/tr[5]/td[3]"); nodeValue=(node.InnerText); ``` ありがとう、ウィル。
回答: FireBugやChromeなどの開発者ツールに依存して、後のノードのXPATHを決定することはできません。このようなツールによって提供されるXPATHは、HTML Agility Packがメモリ内のHTML DOMに対応するためです。サーバーから送信された生のHTMLのみを知っています。 あなたがする必要があるのは、送り返されたものを視覚的に見ることです(または単にソースを見るだけです)。たとえば、TBODY要素がないことがわかります。したがって、判別可能なものを見つけて、たとえばXPATH軸を使用する必要があります。また、XPATHは、たとえそれが機能したとしても、ドキュメントの変更にあまり抵抗しません。そのため、スクレイピングがより将来性のあるものになるためには、より安定した何かを見つける必要があります。 動作するように見えるコードは次のとおりです。 ``` HtmlNode node = doc.DocumentNode.SelectSingleNode("//td[@class='dnTableCell']//a[text()='High']/../../td[3]"); ``` これはそれがすることです: * 「dnTableCell」に設定されたCLASS属性を持つTD要素を見つけます。 //トークンは、検索がXML階層で再帰的であることを意味します。 * 「高」に等しいテキスト(内部テキスト)を含むA要素を見つけます。 * 2つの親を上に移動します(最も近いTR要素に到達します) * そこから3番目のTD要素を選択します