C# .NET。刮取动态(JS)网站[英] C# .NET: Scraping dynamic (JS) websites

问题描述

经过数小时的失败,我来到这里.我需要抓取一个动态生成的网页(使用 Vue.JS 制作,但我不想分享链接).

我尝试了多种方法(123).它们都不适用于此网页.

最有前途的解决方案是使用 Selenium 和 PhantomJS.我像这样尝试过,但我不确定为什么它甚至不适用于 Google:

private void button1_Click(object sender, EventArgs e) {
        PhantomJSDriverService service = PhantomJSDriverService.CreateDefaultService();
        service.IgnoreSslErrors = true;
        service.LoadImages = false;
        service.ProxyType = "none";

        var driver = new PhantomJSDriver(service); // I also tried: new PhantomJSDriver();
        driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(10);
        driver.Url = "https://google.com";
        driver.Navigate();

        var source = driver.PageSource;
        textBox1.AppendText(source);
}

没有用:

在此处输入图片描述

我也尝试过使用 WebBrowser 控件,但页面从未完全加载:

(编辑:我发现 WebBrowser 只是实例化 IE,在尝试在独立的 IE 浏览器中打开目标网站后,网页也永远不会完全加载,因此看到相同的行为是有意义的在 WebView 中.由于这个事实,我认为我必须使用 Selenium&PhantomJS.)

在此处输入图片描述

当然,这不应该如此复杂.如何正确操作?

推荐答案

如果您需要抓取网站,您可以使用 ScrapySharp 抓取框架.您可以将其作为 nuget 添加到项目中.https://www.nuget.org/packages/ScrapySharp/

安装包 ScrapySharp -版本 2.6.2

它有许多有用的属性来访问页面上的不同元素.例如,要访问页面的整个 HTML,您可以使用以下内容:

        ScrapingBrowser Browser = new ScrapingBrowser();
        WebPage PageResult = Browser.NavigateToPage(new Uri("http://www.example-site.com"));
        HtmlNode rawHTML = PageResult.Html;
        Console.WriteLine(rawHTML.InnerHtml);
        Console.ReadLine();

本文地址:https://www.itbaoku.cn/post/1739835.html