1

firebug を使用して XPATH 値を取得することで、Wikipedia の「今日の特集記事」をスクレイピングしようとしています。

ここに画像の説明を入力

そして、それを私のコードに貼り付けます:

string result = wc.DownloadString("http://en.wikipedia.org/wiki/Main_Page");

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(result);

            var featuredArticle = doc.DocumentNode.SelectSingleNode("/html/body/div[3]/div[3]/div[4]/table[2]/tbody/tr/td/table/tbody/tr[2]/td/div/p");

ただし、注目の記事は常に null を返します。私は何を間違っていますか?

4

1 に答える 1

2

Firefox が Html を作成したように、Firebug が XPath を示しているため、サーバーからの Html がそうである場合とそうでない場合があります。また、Firebug からのパスは絶対的なものであり、わずかな変更でも壊れる可能性があります。

探している p-Tag は id の div にあるmp-tfaため、XPath で div を検索し、最初の p を取得する方が簡単です。

このような:

var wc = new WebClient();
var doc = new HtmlDocument();
doc.Load(wc.OpenRead("http://en.wikipedia.org/wiki/Main_Page"));
var featuredArticle = doc.DocumentNode.SelectSingleNode("//div[@id='mp-tfa']/p");
Console.WriteLine(featuredArticle.InnerText);

XPath の使用方法を学ぶのに最適な場所はw3schools.comです。

または、Linq を使用することもできますが、XPath の方がもう少し明確だと思います。

var featuredArticle=   doc.DocumentNode.Descendants("div")
 .First(n => n.Id == "mp-tfa")
 .Descendants("p").FirstOrDefault();
于 2012-08-08T20:05:39.817 に答える