使用htmlagilitypack无法从https URL下载HTML数据

8
我有一个与htmlagilitypack(HAP)相关的“小”问题。当我试图从网站获取数据时,出现以下错误:
未处理的类型为'System.ArgumentException'的异常在mscorlib.dll中发生 附加信息:'gzip'不是受支持的编码名称。有关定义自定义编码的信息,请参阅Encoding.RegisterProvider方法的文档。
我正在使用以下代码从网站获取数据:
HtmlWeb page = new HtmlWeb();
var url = "https://kat.cr/";
var data = page.Load(url);

在这段代码执行后,我遇到了那个错误。我尝试过谷歌上的所有方法,但没有任何帮助。

有人可以告诉我如何解决这个问题吗?

谢谢!

2个回答

13
您可以在使用HtmlWeb时拦截请求,并根据您的要求进行修改。
var page = new HtmlWeb()
{
  PreRequest = request =>
  {
    // Make any changes to the request object that will be used.
    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
    return true;
  }
};

var url = "https://kat.cr/";
var data = page.Load(url);

9

HtmlWeb 不支持 https 下载。因此,您可以使用 WebClient 并进行部分修改以自动解压缩 GZip

class MyWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
        request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
        return request;
    }
}

然后使用HtmlDocument.LoadHtml()方法将HTML字符串填充到HtmlDocument实例中:
var url = "https://kat.cr/";
var data = new MyWebClient().DownloadString(url);
var doc = new HtmlDocument();
doc.LoadHtml(data);

谢谢你的帮助,已经解决了。 现在我有一个更多的问题,我有类似这样的东西: //*[@id=\"torrent_age_of_ultron11227701\"]/td/div/div/a //*[@id=\"torrent_age_of_ultron11227702\"]/td/div/div/a //*[@id=\"torrent_age_of_ultron11227731\"]/td/div/div/a //*[@id=\"torrent_age_of_ultron11227755\"]/td/div/div/a //*[@id=\"torrent_age_of_ultron11227766\"]/td/div/div/a //*[@id=\"torrent_age_of_ultron112277771\"]/td/div/div/a是否有任何命令可以获取XPATH://*[@id=\"torrent_age_of_ultron(在这里使用正则表达式)\"]/td/div/div/a - Valentin Pifu
@ValentinPifu HtmlAgilityPack使用的XPath 1.0不支持正则表达式。也许XPath的starts-with()函数已经足够了?无论如何,这是一个完全不同的话题,与原始问题无关。因此,如果您找不到解决方案,我建议您发布另一个问题。谢谢。 - har07

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接