如何只使用c#Web浏览器加载html

问题描述 投票:0回答:2

我正在使用C#Web浏览器从网站上抓取数据。问题是大约需要20分钟才能获得250条记录。

我以编程方式做的是

1-获取下拉列表中的所有年份

2 - 每年我都会进行搜索。并从表中抓取数据。

该行的第一个单元格是链接(细节),其余单元格具有基本信息。

所以我所做的是获取基本信息,在新浏览器中打开详细信息链接并获取详细信息

4-循环到第3步

我对程序进行了性能测试,发现等待文档加载需要花费大量时间

如果我跳过从详细信息页面抓取数据,则需要1.5分钟来废弃所有数据。

在开始报废之前,我使用以下方法等待文档完成

public async Task WaitPageLoad(int timeOut)
    {
        var pageLoaded = new TaskCompletionSource<bool>();
        var timeElapsed = 0;
        DocumentCompleted += (s, e) =>
        {
            if (ReadyState != WebBrowserReadyState.Complete) return;
            if (pageLoaded.Task.IsCompleted) return; pageLoaded.SetResult(true);
        };

        while (pageLoaded.Task.Status != TaskStatus.RanToCompletion)
        {
            await Task.Delay(10); 
            timeElapsed++;
            if (timeElapsed >= timeOut * 100) pageLoaded.TrySetResult(true);
        }
    }

所以我想知道是否有任何方法使浏览器只加载HTML而不是图像或东西..

任何帮助非常感谢!

c# winforms webbrowser-control
2个回答
0
投票

为什么要使用WebBrowser?这是用于向用户解析和显示内容的控件。这在任何方面都不会很快。

如果您想要的只是数据(并且不打算显示它),您可以简单地执行以下操作:

//Gets you the HTML for a given URL synchronously
var data = new System.Net.WebClient().DownloadString(url);

但是,根据您尝试抓取的页面的复杂程度,上述内容可能更难以使用。

对于更高级的网页抓取,我建议从NuGet获取HtmlAgilityPackIronWebScraper


0
投票

根据您登录网站的方式,您需要使用以下内容来使用WebClient:

WebClient client = new WebClient();
client.Credentials = new NetworkCredential("Username", "Password");
string pageData = client.DownloadString("https://stackoverflow.com/");
© www.soinside.com 2019 - 2024. All rights reserved.