資源描述:
《基于c#多線程web實體抽取設計及實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、基于C#多線程Web實體抽取設計及實現(xiàn)摘要:介紹了c#網(wǎng)絡編程及c#多線程編程的相關類庫,以及網(wǎng)絡編程的相關類庫,并通過一個大型評論網(wǎng)站的數(shù)據(jù)抽取為背景,分析了相關的技術難點,分為抽取、處理、存儲三個模塊,構造了解決方案并將其實現(xiàn)。實驗證明,該框架非常有效。關鍵詞:C#;網(wǎng)絡編程;多線程編程;數(shù)據(jù)抽取中圖分類號:TP319文獻標識碼:A文章編號:1672-7800(2013)001-0084020引言隨著互聯(lián)網(wǎng)的發(fā)展,Web上數(shù)據(jù)的價值越來越得到研究人員的重視。因而獲取Web±的信息成為深入研究的一個重要基礎手段。很多的大型網(wǎng)站會提供API供研究人員抽取其數(shù)據(jù)。然而,仍然有相
2、當多的網(wǎng)站并沒有提供APR對這樣的網(wǎng)站進行研究,就必須依靠編程,用程序抽取,最常見的就是網(wǎng)絡爬蟲。本文利用比較便利的C#網(wǎng)絡編程,結合多線程、正則表達式、AD0等技術,實現(xiàn)一個大型網(wǎng)站的評論實體抽取到本地的應用。文中計劃抽取的網(wǎng)站Resellerrating,com是美國一個著名的網(wǎng)購評論網(wǎng)站,平均每天新增評論約1500條,到目前為止大概有20個類別約56000家網(wǎng)店約141萬條評論,因此數(shù)據(jù)量非常大。筆者綜合了Web抽取的關鍵技術,設計了解決方案,得到了滿意的抽取結果。1C#網(wǎng)絡編程C#中用于網(wǎng)絡編程的類主要在System.Net和System.Net.Sockets這兩個
3、命名空間。System.Net命名空間為當前網(wǎng)絡上使用的多種協(xié)議提供了簡單的編程接口。WebRequest和WebResponse類形成了所謂的可插接式協(xié)議的基礎,可插接式協(xié)議是網(wǎng)絡服務的一種實現(xiàn),使開發(fā)者能夠開發(fā)出使用Internet資源的應用程序,而不必考慮各種不同協(xié)議的具體細節(jié)。WebRequest是.NETFramework的請求/響應模型的abstract基類,發(fā)出對統(tǒng)一資源標識符(URI)的請求,用于訪問Internet數(shù)據(jù)。使用該請求/響應模型的應用程序可以用協(xié)議不可知的方式從Internet請求數(shù)據(jù),在這種方式下,應用程序處理WebRequest類的實例,而協(xié)
4、議特定的子類則執(zhí)行請求的具體細節(jié)。請求從應用程序發(fā)送到某個特定的URI,如服務器上的網(wǎng)頁。WebResponse類是abstract基類,協(xié)議特定的響應類從該抽象基類派生。應用程序可以使用WebResponse類的實例以協(xié)議不可知的方式參與請求和響應事務,而從WebResponse派生的協(xié)議特定的類攜帶請求的詳細信息??蛻舳藨贸绦虿恢苯觿?chuàng)建WebResponse對象,而是通過對WebRequest實例調用GetResponse方法來進行創(chuàng)建。Socket類為網(wǎng)絡通信提供了一套豐富的方法和屬性。Socket類允許開發(fā)者使用ProtocolType枚舉中所列出的任何一種協(xié)議執(zhí)行
5、異步和同步數(shù)據(jù)傳輸。Socket類遵循異步方法的.NETFramework命名模式,例如,同步Receive方法對應于異步BeginReceive和EndReceive方法。如果應用程序在執(zhí)行期間只需要一個線程,可以使用下面兩種方法,這些方法適用于同步操作模式:①如果當前使用的是面向連接的協(xié)議(如TCP),則服務器可以使用Listen方法偵聽連接。Accept方法處理任何傳入的連接請求,并返回可用于與遠程主機進行數(shù)據(jù)通信的Socketo可以使用此返回的Socket來調用Send或Receive方法;如果要指定本地IP地址和端口號,那么在調用Listen方法之前先調用Bind方
6、法;如果希望基礎服務提供程序為用戶分配可用端口,請使用端口號0;如果希望連接到偵聽主機,可以調用Connect方法;若要進行數(shù)據(jù)通信,那么調用Send或Receive方法;②如果當前使用的是無連接協(xié)議(如UDP),則根本不需要偵聽連接。調用ReceiveFrom方法來接受任何傳入的數(shù)據(jù)報,使用SendTo方法可將數(shù)據(jù)報發(fā)送到遠程主機。若要在執(zhí)行過程中使用單獨的線程處理通信,那么可以使用下面的方法,這些方法適用于異步操作模式;③如果當前使用的是面向連接的協(xié)議(如TCP),則可使用Socket、BeginConnect和EndConnect方法來連接偵聽主機。通過使用BeginS
7、end和EndSend方法,或者使用BeginReceive和EndReceive方法,可以進行異步數(shù)據(jù)通信??梢允褂肂eginAccept和EndAccept處理傳入的連接請求;④如果使用UDP等無連接協(xié)議,則可以使用BeginSendTo和EndSendTo來發(fā)送數(shù)據(jù)報,而使用BeginReceiveFrom和EndReceiveFrom來接收數(shù)據(jù)報。當數(shù)據(jù)發(fā)送和數(shù)據(jù)接收完成之后,可使用Shutdown方法來禁用Socketo在調用Shutdown之后,可調用Close方法來釋放與Socket關聯(lián)的