Web scraping HtmlAgilityPack与.NET核心3.1:UTF-8,text/html';不是受支持的编码名称
我使用的是HtmlAgilityPack v1.11.21,自从升级到.NET Core 3.1后,在尝试通过URL加载网页时,我开始收到以下错误:“UTF-8,text/html”不是受支持的编码名称。有关定义自定义编码的信息,请参阅encoding.RegisterProvider方法的文档。(参数“name”) 我找到了这篇文章,但我不确定应该在哪里或如何实施:Web scraping HtmlAgilityPack与.NET核心3.1:UTF-8,text/html';不是受支持的编码名称,web-scraping,html-agility-pack,asp.net-core-3.1,.net-core-3.1,Web Scraping,Html Agility Pack,Asp.net Core 3.1,.net Core 3.1,我使用的是HtmlAgilityPack v1.11.21,自从升级到.NET Core 3.1后,在尝试通过URL加载网页时,我开始收到以下错误:“UTF-8,text/html”不是受支持的编码名称。有关定义自定义编码的信息,请参阅encoding.RegisterProvider方法的文档。(参数“name”) 我找到了这篇文章,但我不确定应该在哪里或如何实施: System.Text.EncodingProvider=System.Text.codepagensencodingprovi
System.Text.EncodingProvider=System.Text.codepagensencodingprovider.Instance;
编码。注册表提供程序(提供程序);
我试着在打电话之前把它放好
var-web=new-HtmlWeb();
var doc=web.Load(urlToSearch);
但这并没有解决问题
这在升级到.NETCore3.1之前运行良好,所以我不确定我到底需要在哪里实施修复
任何想法都将不胜感激
谢谢
对于那些询问url的人,我不想分享,但标题如下:
网站名称
那里看起来没有什么特别的东西。希望它是一个.NET核心3.1的东西
作为另一个度量,我尝试实现下面的函数,但是response.Content.ReadAsStringAsync()返回为空
使用var-httpClient=new-httpClient();
{
var response=wait-httpClient.GetAsync(urlToSearch);
if(响应。IsSuccessStatusCode)
{
var html=await response.Content.ReadAsStringAsync();
var doc=新的HtmlDocument();
doc.LoadHtml(html);
var photoUrl=doc.QuerySelector(“div#headshot”).ChildNodes[0]。属性[“src”]。值;
返回新的OkObjectResult(photoUrl);
}
}
看起来这不是.NET Core 3.1的问题,而是您试图加载的URL的问题
- [……]
- UTF-8(代码页65001),由Encoding.UTF8属性返回
- [……]
UTF-8,text/html
这是意料之中的事
在标题中,它看起来像:
Content-Type: text/html;charset=utf-8
在HTML中,例如:
<meta charset="utf-8"/>
ReadAsStringAsync
是否返回空字符串:可能是同一个问题-标题错误,或者可能是代码中的错误(据我所知,ReadAsStringAsync
实际上并不返回字符串
)。您可以尝试将HTML作为静态字符串传递
html = "<!DOCTYPE html>...";
doc.LoadHtml(html);
html=“…”;
doc.LoadHtml(html);
隔离最初的问题ReadAsStringAsync
您应该首先检查它是否成功读取其他站点。我在网上看了。。。有很多可能性。不知道什么对你有用您能否提供导致问题的
urlToSearch
?我用几个随机选择的URL做了一些测试,它们都工作得很好(使用.NET Core 3.1和HtmlAgilityPack 1.11.21)。错误很明显-带大小写的字符串不是有效的编码ASP.NET总是使用UTF8编码。StackOverflow是一个ASP.NET stie,最近迁移到ASP.NET Core,并使用UTF8,您只需检查浏览器中的编码即可验证。您链接到的问题提到了另一个不存在的编码-UTF8
1)代码是否在其他页面上使用了ReadAsStringAsync()
成功(直到QuerySelector
,它才是不相关的)?2)HTTP头是什么?3) 你能在任何地方找到UTF-8,text/html
字符串吗?
curl -v yourURL
html = "<!DOCTYPE html>...";
doc.LoadHtml(html);