【问题标题】:Web Scraping in C# just isn't working as expectedC# 中的 Web Scraping 无法按预期工作
【发布时间】:2020-08-09 11:01:29
【问题描述】:

我一直在尝试从某个网站抓取一些数据,但我的代码似乎没有按预期运行。它只是没有让我获得 html 页面。

    public Scraper()
    {
        BGWorker.DoWork += GetHtml;
        BGWorker.RunWorkerAsync();
    }

    static void GetHtml(object sender, DoWorkEventArgs e)
    {
        System.Threading.Thread.Sleep(1);
        Console.WriteLine("Downloading Data...");
        
        ScrapingBrowser _ScrapingBrowser = new ScrapingBrowser();

        WebPage webPage = _ScrapingBrowser.NavigateToPage(new Uri("https://www.goodwebsite.com"));

        Console.WriteLine(webPage.Html);
        Console.WriteLine("Got the Data");
    }

【问题讨论】:

  • 带给你什么?根据您的问题,恐怕我们真的无话可说
  • 您看到任何消息了吗?有什么错误吗?
  • 只是一个建议;我会使用另一个库 (github.com/hardkoded/puppeteer-sharp) 来进行网络抓取或 Selenium。它简单、通用、最新并且有大量示例。还有大量的 Selenium 示例和文章。
  • 你使用的是来自scrapysharp:github.com/rflechner/ScrapySharpScrapingBrowser吗?
  • https://www.goodwebsite.com 似乎已经死了,它重定向到park.above.comww38.qfind.net。您是否要抓取这些网站?或者你想抓取https://www.goodwebsite.com,这似乎是一个存根?另外,您能否明确说明您使用的 ScrapingBrowser 来自哪个 nuget 或其他库?

标签: c# web screen-scraping


【解决方案1】:

您可以使用 C# Selenium,只需从 NuGet 包管理器安装它。 它看起来像这样:

            var chromeOptions = new ChromeOptions();
            chromeOptions.AddArgument("headless");
            ChromeDriver driver = new ChromeDriver(chromeOptions);

            driver.Navigate().GoToUrl("https://www.bikes.com/");
            var source = driver.PageSource;

            Console.WriteLine(source);

【讨论】:

    【解决方案2】:

    如果您使用的是 ScrapySharp,请确保它是更新(最新)版本。

    要显示 scraped 网页的 HTML,您在 webPage.Html 之后缺少 .InnerHtml

    static void GetHtml(object sender, DoWorkEventArgs e)
        {
            System.Threading.Thread.Sleep(1);
            Console.WriteLine("Downloading Data...");
            
            ScrapingBrowser _ScrapingBrowser = new ScrapingBrowser();
    
            WebPage webPage = _ScrapingBrowser.NavigateToPage(new Uri("https://www.goodwebsite.com"));
    
            Console.WriteLine(webPage.Html.InnerHtml);
            Console.WriteLine("Got the Data");
        }
    

    基本上你只是输出对象类型而不是值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      相关资源
      最近更新 更多