1

htmlagilitypack を使用して Web ページの一部をスクレイピングしています。実際の出力を取得していますが、常にではありません。

HtmlAgilityPack.HtmlWeb web = new HtmlWeb(); 
web.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4";
HtmlAgilityPack.HtmlDocument doc = web.Load(url);
var resultPriceTable = doc.DocumentNode.SelectNodes("//div[@class='resultsset']//table");

場合によっては、resultPriceTable が null になります (ほぼ 50%)。デバッグの結果、

HtmlAgilityPack.HtmlDocument doc = web.Load(url);

問題を引き起こしています。URLが読み込まれないことがあります。この問題を解決するには?

前もって感謝します。

4

1 に答える 1

0

WebClient または HttpWebRequest/HttpWebResponse を介してページを読み込んでから、結果を HtmlAgilityPack に送信してみてください

このコード サンプルは、空の文字列を取得した場合、またはWebException

本番コードでは、単に例外をスキップするのではなく、慎重に処理する (または少なくともログに記録する) 必要があります。

サンプル:

string html = string.Empty;
            int tries = 5;
            while (tries > 0)
            {
                using (var client = new WebClient())
                {

                    string url = "http://google.com/";
                    client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4");
                    try
                    {
                       html = client.DownloadString(url);
                        tries--;
                        if (!string.IsNullOrEmpty(html))
                        {
                            break;
                        }
                    }
                    catch (WebException)
                    {
                        tries--;
                    }
                }
            }
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(html);
于 2012-06-06T09:55:30.327 に答える