1

AngleSharp 在哪里公开已解析文档的 Uri ?

考虑以下代码段:

    HttpClient httpClient = new HttpClient();
    string htmlString = httpClient.GetStringAsync("http://www.stackoverflow.com").Result;

    HtmlParser htmlParser = new HtmlParser();
    var parsedHtml = htmlParser.Parse(htmlString);

    Console.WriteLine(parsedHtml.Url);
    Console.WriteLine(parsedHtml.DocumentUri);

它会打印about:blank两次。文档被解析了,可以访问Title等属性,但是找不到对其uri的引用。

有人成功做到这一点吗?

4

2 回答 2

2

在您的代码中,唯一传递给AngleSharp的是包含 HTML 的字符串。如果您考虑一下,您将无法AngleSharp知道您从哪里获得字符串(它可以来自 URL、文件或硬编码为 C# 字符串文字)。

DocumentUri正常工作,您需要找到一种方法以“AngleSharp 方式”从 URL 加载文档,可能使用BrowsingContext. 以下代码为我正确打印 URL:

static void Main(string[] args)
{
    var config = Configuration.Default.WithDefaultLoader();
    var task = BrowsingContext.New(config).OpenAsync("http://www.stackoverflow.com");
    var parsedHtml = task.Result;
    Console.WriteLine(parsedHtml.DocumentUri);
}
于 2016-04-12T10:49:21.713 回答
0

粗略搜索AngleSharp 的“DocumentUri”结果如下

[Test]
    public async Task LoadFromStringAndLoadFromUrlShouldResultInSameDom()
    {
        if (Helper.IsNetworkAvailable())
        {
            var config = new Configuration().WithDefaultLoader();
            var url = "http://imama.shop.by/kolyaski/detskaya_kolyaska_tutis_zippy_2_v_1_cvet_12_shokoladnyy223222222/";
            var client = new HttpClient();
            var message = new HttpRequestMessage(HttpMethod.Get, url);
            var response = await client.SendAsync(message);
            var html = await response.Content.ReadAsStringAsync();

            var documentStr = await BrowsingContext.New(config).OpenAsync(m => m.Content(html));
            var titleStr = documentStr.Title;

            var documentUri = await BrowsingContext.New(config).OpenAsync(url);
            var titleUri = documentUri.Title;

            Assert.AreEqual(titleUri, titleStr);
        }
    }
于 2016-04-12T09:36:08.763 回答