1

我正在使用 htmlagilitypack 来抓取网页的某些部分。我得到了实际的输出,但并非总是如此。

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 在某些情况下为空(接近 50%)。通过调试我发现

HtmlAgilityPack.HtmlDocument doc = web.Load(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 回答