`
jiasongmao
  • 浏览: 676260 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

多线程使用webbrowser异步提取Html内容

    博客分类:
  • .NET
 
阅读更多
using System.Threading;
using System.Windows.Forms;
 
namespace GetAfterAJAXPage
{
 
 
 
    public class WebBrowserCrawler
    {
        // WebBrowser
        private WebBrowser _WebBrowder;
 
        //最后结果
        private string _Result { get; set; }
 
        //网址
        private string _Path { get; set; }
 
      
        /// <summary>
        /// 对外公开的Method
        /// </summary> www.it165.net
        /// <param name="url">URL Path</param>
        /// <returns></returns>
        public string GetReult(string url)
        {
 
            _Path = url;
 
 
            var mThread = new Thread(FatchDataToResult);
            //Apartment 是处理序当中让物件共享相同执行绪存取需求的逻辑容器。 同一 Apartment 内的所有物件都能收到 Apartment 内任何执行绪所发出的呼叫。 
            //.NET Framework 并不使用 Apartment;Managed 物件必须自行以安全执行绪 (Thread-Safe) 的方式运用一切共享资源。
            //因为 COM 类别使用 Apartment,所以 Common Language Runtime 在 COM Interop 的状况下呼叫出 COM 物件时必须建立 Apartment 并且加以初始化。 
            //Managed 执行绪可以建立并且输入只容许一个执行绪的单一执行绪 Apartment (STA),或者含有一个以上执行绪的多执行绪 Apartment (MTA)。 
            //只要把执行绪的 ApartmentState 属性设定为其中一个 ApartmentState 列举型别 (Enumeration),即可控制所建立的 Apartment 属于哪种型别。 
            //因为特定执行绪一次只能初始化一个 COM Apartment,所以第一次呼叫 Unmanaged 程式码之后就无法再变更 Apartment 型别。
            //From : http://msdn.microsoft.com/zh-tw/library/system.threading.apartmentstate.aspx
            mThread.SetApartmentState(ApartmentState.STA);
            mThread.Start();
            mThread.Join();
 
            return _Result;
 
        }
 
        /// <summary>
        /// Call _WebBrowder 抓取资料
        /// For thread Call
        /// </summary>
        private void FatchDataToResult()
        {
            
            _WebBrowder = new WebBrowser();
 
            _WebBrowder.DocumentCompleted += _WebBrowder_DocumentCompleted;
            _WebBrowder.Navigate(_Path);
 
 
            //处理目前在讯息伫列中的所有 Windows 讯息。
            //如果在程式码中呼叫 DoEvents,您的应用程式就可以处理其他事件。例如,如果您的表单将资料加入 ListBox 并将 DoEvents 加入程式码中,则当另一个视窗拖到您的表单上时,该表单将重新绘製。
            //如果您从程式码移除 DoEvents,您的表单将不会重新绘製,直到按钮按一下的事件处理常式执行完毕。
            while (_WebBrowder.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }
 
            _WebBrowder.Dispose();
 
        }
 
        //结束后回填
        void _WebBrowder_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            _Result = (sender as WebBrowser).Document.Body.InnerHtml;
            
        }
 
 
    }
 
 
}

 

 

WebBrowserCrawler  webBrowserCrawler=new WebBrowserCrawler();
          File.WriteAllText(Server.MapPath("sample.txt"),webBrowserCrawler.GetReult(http://www.in2.cc/sample/waterfalllab.htm));
 

 

 

原文地址:http://www.it165.net/pro/html/201208/3614.html

 

 

 

分享到:
评论

相关推荐

    Delphi多线程下载文件 获取网页内容控件.rar

    其次,获取网页内容通常是通过HTTP GET请求实现的,这可能涉及到解析HTML、提取特定信息或使用WebBrowser控件展示整个页面。在Delphi中,可以使用Indy的TIdHTTP组件或WinINet API来发送HTTP请求,并获取响应的HTML...

    printhtml_4_0_0_19_c#printhtml_

    5. **线程安全与异步操作**:在多用户或高性能环境中,打印操作可能需要考虑线程安全性和异步处理,以避免阻塞UI线程。 6. **调试与日志**:`license.rtf`文件可能包含了该库的许可协议信息,这在使用开源库时尤其...

    .net 内容采集源码

    总结来说,.NET内容采集源码涵盖了网络请求、HTML解析、数据处理、多线程、异步编程、数据库操作以及异常和日志管理等多个方面。理解并熟练运用这些知识点,可以构建出高效、稳定的网络爬虫系统。在实际开发中,还...

    PictureDownload

    7. **多线程或并行处理**:为了提高效率,可能采用多线程或异步并行下载图片,比如使用Task Parallel Library (TPL)。 综上所述,“PictureDownload”项目涵盖了C#编程、HTTP通信、HTML解析、文件操作等多个方面,...

    Java_WebBrowser.rar_Java Web Browser_java webbrows_java 浏览器_web浏

    7. **网页解析**: 虽然JEditorPane能处理基本的HTML,但复杂的网页可能需要更强大的解析器,如Jsoup,它可以解析DOM树,提取或修改网页内容。 8. **安全性**: 对于一个真正的Web浏览器,需要考虑安全问题,例如处理...

    基于c++web浏览器

    多线程可以提高用户体验,如使用异步加载和更新;而安全通信则需要遵循HTTPS的最佳实践,保护用户的隐私。 总的来说,"基于C++的Web浏览器"项目是一个综合性的学习和实践过程,涉及到了C++语言基础、网络编程、...

    C++ builder 网页元素获取实例

    或者使用多线程,提高并行处理能力。 在提供的压缩包文件"网页元素获取"中,可能包含了实现上述功能的源代码示例,你可以通过阅读和分析代码来学习如何在C++ Builder中进行实际操作。这些实例代码会演示如何组合...

    基于socket的浏览器

    此外,浏览器可能还需要考虑一些实际应用中的问题,如错误处理(异常捕获和处理)、多线程(用于并发请求)、缓存策略(提高加载速度)、用户界面设计(用户体验)等。在C#中,可以利用Task并行库来实现异步操作,...

    ICP备案批量查询器源代码

    4. 并行处理:多线程或异步编程技术,提高批量查询的效率。 5. 文件操作:读取和写入文本文件,如CSV,用于存储网站列表和查询结果。 6. 用户界面设计:使用WinForms或WPF创建友好直观的用户界面。 通过学习和理解...

    C#网络浏览器

    8. **多线程**: 为了保证用户界面的响应性,网络浏览器通常在后台线程上执行网络请求。C#中的Task和async/await关键字可以帮助实现异步操作。 9. **用户交互**: 使用事件驱动编程来响应用户的操作,如按钮点击...

    Web浏览器(c#源码 )

    响应内容可能需要进一步解析,如提取HTML、CSS和脚本。 - **HTML解析**:使用HTML解析库(如AngleSharp)解析获取的HTML内容,生成DOM树。 - **页面渲染**:将DOM树转换为可视化的UI。如果使用WebBrowser控件,...

    基于C#的浏览器的设计与实

    开发者可以使用这些框架创建浏览器的地址栏、前进/后退按钮、刷新按钮等控件,并将解析后的HTML内容显示在一个WebBrowser控件中。 4. **WebBrowser控件**:这是.NET框架提供的一种内置控件,可以直接在C#程序中嵌入...

    vb实例 第5章 网络与Internet

    12. **多线程处理**:网络操作往往涉及异步处理,VB支持多线程编程,可以使用Thread或Task类创建并管理新的执行线程,避免阻塞UI。 以上只是VB网络与Internet编程的部分内容,实际学习中还会涉及更多细节,如错误...

    C#ie浏览器

    7. **HTML交互**:通过WebBrowser控件,可以使用`Document`属性访问HTML文档的DOM(文档对象模型),进行页面元素的操作或数据提取。 8. **异步编程**:考虑到网页加载可能会阻塞UI线程,可以使用异步编程技术,如`...

    在线考试关键技术

    综上所述,通过采用窗体异步更新、WSE、基于WebBrowser的富文本编辑器以及试题的导入导出功能等关键技术,可以显著提升在线考试系统的用户体验和安全性。这些技术的应用不仅解决了传统考试方式存在的问题,还为在线...

    winform Server.Execute

    - **HTML内容**:如果Server.Execute返回HTML,可以使用WebBrowser控件来显示内容,或者使用HTML解析库(如HtmlAgilityPack)来提取所需信息。 - **自定义数据格式**:如果是自定义格式,如JSON或XML,可以使用...

    易语言浏览网页源码.rar

    3. **多线程**:为了实现网页的异步加载,避免阻塞用户界面,易语言的多线程技术可以派上用场。创建新的工作线程来加载网页,主线程则负责显示用户界面。 4. **控件操作**:在易语言中,可能使用了WebBrowser控件...

    基于CEF框架的爬虫

    因此,理解内存管理、多线程和性能优化技术对于构建高效的CEF爬虫至关重要。 8. **错误处理和异常安全**:在编写CEF爬虫时,必须考虑网络错误、页面加载失败等情况,并编写相应的错误处理代码,以确保程序的健壮性...

    Browser.rar_浏览器_C#_

    7. **线程安全**:由于网络I/O操作是异步的,我们可能需要使用BackgroundWorker或Task来避免阻塞主线程,确保用户界面的响应性。 8. **安全性**:考虑到网络请求可能涉及敏感信息,需要使用HTTPS来加密通信。C#中的...

    易语言下载地址转换源码-易语言

    8. **多线程或异步下载**:为了提高下载效率,源码可能采用了多线程或异步下载的方式,允许同时处理多个下载任务。 9. **进度显示**:对于用户友好的界面,源码可能还包含了下载进度的实时显示,易语言提供事件驱动...

Global site tag (gtag.js) - Google Analytics