使用C#和.NET Framework进行屏幕抓取,Web抓取,Web收集,Web数据提取等
我正在使用C#中的Microsoft .NET应用程序进行Web收集,Web Scraping,Web数据提取,屏幕抓取等,无论您想要什么称呼它。 对于解析HTML,我正在尝试合并HTML Agility Pack,但它并不像我想象的那么容易。 我已经包含了一些我目前所掌握的规范和图像,并希望得到你对我如何进行的意见。 基本上,我想做一些类似于Visual Web Ripper中使用的布局,但我不知道他们是如何做到的……任何想法?
图片:
https://img69.imageshack.us/img69/8880/webharvester1.png
https://img198.imageshack.us/img198/9563/webharvester2.png
产品规格:
我的目标是创建一个非常用户友好的点击式应用程序,用于从Web下载数据和图像。 我想使用Web浏览器加载HTML页面,并将解析后的数据和图像链接输出到文本框中。 用户可以指定他们想要的HTML标签,然后将数据下载到网格中。 最后,将数据导出为他们需要的任何格式。
我正在尝试使用HTML Agility Pack在网页上加载HTML并将其显示在文本框中。
// Load Web Browser private void Form6_Load(object sender, EventArgs e) { // Navigate to webpage webBrowser.Navigate("https://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 + "rn"; } }
对于: HtmlWindow window = webBrowser.Document.Window;
我收到错误:对象引用未设置为对象的实例。
在引用浏览器窗口时,可能没有完成页面加载。 您可以让浏览器控件在完成后触发navigationcomplete事件。 请参阅此SO答案以获取示例: C#如何在继续之前等待网页完成加载
我不熟悉HTMLAgilityPack
但我过去使用的一个组件是SGMLReader
: http : //developer.mindtouch.com/SgmlReader 。 它的function类似于XMLReader
替代品,如果需要,甚至可以将文档转换为XML。 您可以将其加载到XMLDocument
(甚至是XDocument
)中,然后由您使用它来完成。
所以我建议使用HTTPWebRequest
获取HTML,然后将HTML加载到此组件中。 这样你就不需要去WebBrowser
控件附近了。
对于屏幕抓取,如果要搜索特定的图像/形状,可以使用https://www.emgu.com/wiki/index.php/Main_Page 。 可能会派上用场。
您也可以使用WinAPI“读取”屏幕
private Bitmap Capture(IntPtr hwnd) { return Capture(hwnd, GetClientRectangle()); } private Bitmap Capture(IntPtr hwnd, Rectangle zone) { IntPtr hdcSrc = GetWindowDC(hwnd); IntPtr hdcDest = CreateCompatibleDC(hdcSrc); IntPtr hBitmap = CreateCompatibleBitmap(hdcSrc, zone.Width, zone.Height); IntPtr hOld = SelectObject(hdcDest, hBitmap); BitBlt(hdcDest, 0, 0, zone.Width, zone.Height, hdcSrc, zone.X, zone.Y, SRCCOPY); SelectObject(hdcDest, hOld); DeleteDC(hdcDest); ReleaseDC(hwnd, hdcSrc); Bitmap retBitmap = Bitmap.FromHbitmap(hBitmap); DeleteObject(hBitmap); return retBitmap; }
解析HTML文档
using SHDocVw;//Interop.SHDocVw.dll using mshtml;//Microsoft.mshtml.dll InternetExplorer ie= new InternetExplorer(); ie.Navigate("www.example.com"); ie.Visible = true; Thread.Sleep(5000);//wait until page loads mshtml.HTMLDocument doc; doc = ie.Document;//gives the HTML document of the Page
获取标签的所有元素
IHTMLElementCollection AnchorColl = body.getElementsByTagName("a");//Html element's tag name
并解析AnchorColl以获取该标记的所有元素。
上述就是C#学习教程:使用C#和.NET Framework进行屏幕抓取,Web抓取,Web收集,Web数据提取等分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1020012.html