6

该网页使用 javascript 来构建其 html,因此我需要具有 js 支持的 html 解析器。
我找到了anglesharp,但我无法让它工作。

using AngleSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace AngleSharpScraping
{
    class Program
    {
        static void Main(string[] args)
        {
            GetMkvToolNix();
            Console.ReadKey();
        }

        static async void GetMkvToolNix()
        {
            // Create a new configuration with javascript interpreter.
            var config = new Configuration().WithJavaScript();

            // Parsing process.
            var document = await BrowsingContext.New(config).OpenAsync(Url.Create("http://www.fosshub.com/MKVToolNix.html"));
            var link = document.QuerySelector("body > div.container.page-content > div > div.col-sm-9 > article > div.main-dl-box > p:nth-child(2) > a.dwl-link.xlink").GetAttribute("data");

            Console.WriteLine(link);
        }
    }
}
4

2 回答 2

5

单独的 AngleSharp 仅提供 HTML 和 CSS 解析器。但是,可以使用 JavaScript 功能扩展 AngleSharp。现在,您使用的包 ( AngleSharp.Scripting.JavaScript ) 是实验性的,或多或少是概念证明。

页面上的 JavaScript 文件对于实验性支持来说仍然过于复杂。我努力尽快启用对此类场景的支持,但现在我想说 WebKit.NET 可能是您解决问题的最佳选择。

另一种可能的解决方案可能是使用Selenium的 C# 驱动程序。

与整个 JavaScript 主题无关:如果要加载外部资源,则需要提供适当的 (http) 请求者。最简单的方法是使用默认方法:

var config = new Configuration().WithDefaultLoader();
var document = await BrowsingContext.New(config).OpenAsync("http://www.fosshub.com/MKVToolNix.html");
// ...

在此设置中,加载了外部文档,但不加载其他资源(例如,图像、脚本……)。

于 2015-06-08T08:11:25.240 回答
3

AngleSharp 是一个文本解析器。如果你想用 JS 抓取动态网页,你需要一个无头浏览器。

这个答案提供了几个选项(至少一个免费和开源:WebKit.NET)。

于 2015-06-07T17:52:52.910 回答