【问题标题】:Call a ASP.NET script from a C# desktop app从 C# 桌面应用程序调用 ASP.NET 脚本
【发布时间】:2026-01-12 13:10:01
【问题描述】:

我正在尝试开发一个桌面应用程序以用作网站抓取工具。我的要求是用户应该能够在桌面应用程序中指定一个 url。桌面应用程序应该能够调用 asp.net 脚本从网站抓取数据并将记录返回到桌面应用程序。

我应该为此使用 Web 服务还是 ASP.NET 运行时...???

任何帮助表示赞赏:)

其他详情

抓取活动已经完成。我使用了 HTMLAgility pkg。这是我从网页中提取公司名称列表的抓取代码。

public static String getPageHTML(String URL)
        {
            String totalCompanies = null;
            HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);

            IWebProxy myProxy = httpWebRequest.Proxy;

            if (myProxy != null)
            {
                myProxy.Credentials = CredentialCache.DefaultCredentials;
            }

            httpWebRequest.Method = "GET";

            HttpWebResponse res;

            res = (HttpWebResponse)httpWebRequest.GetResponse();

            HtmlDocument doc1 = new HtmlDocument();

            doc1.Load(res.GetResponseStream());

            HtmlNode node = doc1.DocumentNode.SelectSingleNode("//td[@class='mainbody']/table/tr[last()]/td");

            try
            {
                totalCompanies = node.InnerText;
                return totalCompanies;
            }
            catch (NullReferenceException e)
            {
                   totalCompanies = "No records found";
                    return totalCompanies;

             }




        }

【问题讨论】:

  • 我认为你需要网络服务。
  • 为什么不能通过WebClient直接下载?并使用 HtmlAgilityPack 解析检索到的 html?另外,请查看多线程的一些基础知识以并行处理。

标签: c# asp.net web-scraping


【解决方案1】:

您可以在您的桌面应用程序中使用HttpWebRequest,我之前已经这样做过(winforms)。例如:-

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("url");
var response = new StreamReader(req.GetResponse().GetResponseStream()).ReadToEnd();

然后您可以使用HtmlAgilityPack 来解析响应中的数据:

 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
 doc.LoadHtml(response);

 //Sample query
 var node = doc.DocumentNode.Descendants("div")
           .Where(d => d.Attributes.Contains("id")).ToList(); 

【讨论】:

  • 谢谢 DGibbs。我会试试这个然后回复你:)
【解决方案2】:

(包含更多细节/更具体会很有帮助)

如果您的 ASP.NET 页面已经完成了所有抓取,而您只需访问该 ASP.NET 页面,则可以简单地使用 HttpWebRequest

http://msdn.microsoft.com/en-us/library/456dfw4f.aspx - 简短描述和教程

如果该 URL 是要被抓取的网站,并且您需要在项目中包含该 ASP.NET 脚本,那么您需要将其添加为 Web 服务。

【讨论】:

  • URL是要抓取的网站
  • 好的。您要使用的 ASP.NET 脚本在哪里?您要么必须在代码中引用它,要么(疯狂猜测)HTTP 将您的 url 作为参数发送给它。请提供有关脚本的更多详细信息
  • 好的..现在我真的不明白问题出在哪里。你有要抓取的代码,你有桌面应用程序..有什么问题?
【解决方案3】:

您可以同时使用这两种方法,也可以通过将网络浏览器添加到您的桌面应用程序来实现。我不知道为什么,但结果要快得多。

【讨论】: