使用HtmlAgilityPack抓取网址内容会产生错误

asp.net c# html-agility-pack webforms

我正在使用HtmlAgilityPack从网址中获取文本,该文本适用于大多数网站,对于某些网站来说,它今天开始返回错误。

错误是以下行代码doc = webGet.Load(url);错误消息: The underlying connection was closed: An unexpected error occurred on a send.

不知道为什么我得到这个错误,因为它正在使用此网站url以前的示例url: link

我试过像bbc.com这样的https url,它适用于它。任何指针,如果他们的代码有问题

 HtmlDocument doc = new HtmlDocument();
            var url = txtGrabNewsURL.Text.Trim();

        var webGet = new HtmlWeb();
        doc = webGet.Load(url);
        var baseUrl = new Uri(url);
        //  doc.LoadHtml(response);

        String title = (from x in doc.DocumentNode.Descendants()
                        where x.Name.ToLower() == "title"
                        select x.InnerText).FirstOrDefault();

        String desc = (from x in doc.DocumentNode.Descendants()
                       where x.Name.ToLower() == "meta"
                       && x.Attributes["name"] != null
                       && x.Attributes["name"].Value.ToLower() == "description"
                       select x.Attributes["content"].Value).FirstOrDefault();

        String ogImage = (from x in doc.DocumentNode.Descendants()
                          where x.Name.ToLower() == "meta"
                          && x.Attributes["property"] != null
                          && x.Attributes["property"].Value.ToLower() == "og:image"
                          select x.Attributes["content"].Value).FirstOrDefault();


        List<String> imgs = (from x in doc.DocumentNode.Descendants()
                             where x.Name.ToLower() == "img"
                              && x.Attributes["src"] != null
                             select x.Attributes["src"].Value).ToList<String>();

        List<String> imgList = (from x in doc.DocumentNode.Descendants("img")
                                where x.Attributes["src"] != null
                                select x.Attributes["src"].Value.ToLower()).ToList<String>();

完整错误详情

 HtmlDocument doc = new HtmlDocument();
            var url = txtGrabNewsURL.Text.Trim();

        var webGet = new HtmlWeb();
        doc = webGet.Load(url);
        var baseUrl = new Uri(url);
        //  doc.LoadHtml(response);

        String title = (from x in doc.DocumentNode.Descendants()
                        where x.Name.ToLower() == "title"
                        select x.InnerText).FirstOrDefault();

        String desc = (from x in doc.DocumentNode.Descendants()
                       where x.Name.ToLower() == "meta"
                       && x.Attributes["name"] != null
                       && x.Attributes["name"].Value.ToLower() == "description"
                       select x.Attributes["content"].Value).FirstOrDefault();

        String ogImage = (from x in doc.DocumentNode.Descendants()
                          where x.Name.ToLower() == "meta"
                          && x.Attributes["property"] != null
                          && x.Attributes["property"].Value.ToLower() == "og:image"
                          select x.Attributes["content"].Value).FirstOrDefault();


        List<String> imgs = (from x in doc.DocumentNode.Descendants()
                             where x.Name.ToLower() == "img"
                              && x.Attributes["src"] != null
                             select x.Attributes["src"].Value).ToList<String>();

        List<String> imgList = (from x in doc.DocumentNode.Descendants("img")
                                where x.Attributes["src"] != null
                                select x.Attributes["src"].Value.ToLower()).ToList<String>();

一般承认的答案

如果它只发生在HTTP S资源上,那么你的目标是.Net 4,那么它可能与默认的SSL / TLS支持有关。请尝试以下方法:

using System.Net;

static void Main()
{
    //place this anywhere in your code prior to invoking the Web request
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 |  SecurityProtocolType.Ssl3; 
}

热门答案

我在我的本地机器上运行代码,它工作正常,输出没有任何错误。我以为时间网站不工作,发生了连接问题。

   HtmlDocument doc = new HtmlDocument();
        var url = "https://m.gulfnews.com/business/sectors/banking/rebuilding-lives-10-years-after-lehman-s-fall-1.2277318"

    var webGet = new HtmlWeb();
    doc = webGet.Load(url);

    String title = (from x in doc.DocumentNode.Descendants()
                    where x.Name.ToLower() == "title"
                    select x.InnerText).FirstOrDefault();

产出:重建生命,10。 。 。 。 。等等。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因