网页中flash数据抓取(VisualWebRipper如何等待网页完成后再继续其他解决方案?)
优采云 发布时间: 2021-12-13 10:02网页中flash数据抓取(VisualWebRipper如何等待网页完成后再继续其他解决方案?)
问题
我正在用 C# 开发 Microsoft .NET 应用程序,用于网络采集、网络抓取、网络数据提取、屏幕抓取等。不管你想怎么称呼它。为了解析HTML,我尝试合并HTML Agility Pack,但并没有我想象的那么容易。我已经收录了迄今为止我拥有的一些规格和图像,希望能得到您对我的处理方式的意见。基本上,我想做一些类似于 Visual Web Ripper Layout 中使用的事情,但我不知道他们是如何做到的......有什么想法吗?
规格:
我的目标是制作一个非常用户友好的点击式应用程序,用于从网络下载数据和图像。我想使用网络浏览器加载 HTML 页面并将解析后的数据和图像链接输出到文本框中。用户可以指定他们想要的 HTML 标签,然后将数据下载到网格中。最后,将数据导出为他们需要的任何格式。
我正在尝试使用 HTML Agility Pack 在网页上加载 HTML 并将其显示在文本框中。
// Load Web Browser
private void Form6_Load(object sender, EventArgs e)
{
// Navigate to webpage
webBrowser.Navigate("http://www.webopedia.com/TERM/H/HTML.html");
// Save URL to memory
SiteMemoryArray[count] = urlTextBox.Text;
// Load HTML from webBrowser
HtmlWindow window = webBrowser.Document.Window;
string str = window.Document.Body.OuterHtml;
// Extract tags using HtmlAgilityPack and display in textbox
HtmlAgilityPack.HtmlDocument HtmlDoc = new HtmlAgilityPack.HtmlDocument();
HtmlDoc.LoadHtml(str);
HtmlAgilityPack.HtmlNodeCollection Nodes =
HtmlDoc.DocumentNode.SelectNodes("//a");
foreach (HtmlAgilityPack.HtmlNode Node in Nodes)
{
textBox2.Text += Node.OuterHtml + "\r\n";
}
}
利用:
HtmlWindow window = webBrowser.Document.Window;
我收到错误:未将对象引用设置为对象的实例。
解决方案
当您参考浏览器窗口时,您可能无法完成页面加载。您可以让浏览器控件在完成后触发导航完成事件。请参阅此 SO 答案以获取示例:C# 如何在继续之前等待页面加载
其他解决方案
我不熟悉 HTMLAgilityPack,但我过去使用过的一个组件是 SGMLReader:它的功能类似于 XMLReader 的替代品,甚至可以根据需要将文档转换为 XML。您可以将其加载到 XMLDocument(甚至 XDocument)中,然后您决定如何使用它。