国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

爬蟲/蜘蛛程序的制作(C#語言)

2024-07-21 02:26:19
字體:
來源:轉載
供稿:網友

問題是對某一網站或所有網站進行抓取,即下載所有網頁。怎么實現呢?

先將問題最小化(轉化的思想,轉化為小規模,可以解決的問題):如果只有一個網頁,怎么下載?問題變地很簡單,只要用webclient/webrequest(甚至openfiledialog都可以)打開url地址,將數據流存入本地存儲器的文件(以相應的擴展名作為擴展名)即可。示例代碼如下:

string boardstream;//下載內容存入此變量

uri url = new uri( “http://www.163.com” );//將下載地址轉換為uri類型

httpwebrequest requestpage = ( httpwebrequest )webrequest.create( url );

webresponse response = requestmainpage.getresponse();

stream stream = response.getresponsestream();//獲取頁面流

if( response.contenttype.tolower().startswith( "text/" ) )//如果獲得成功(即為文本格式)

{

    streamreader reader = new streamreader( stream , system.text.encoding.utf8 );//讀取獲得內容流

boardstream = reader.readtoend();//將內容流轉換為文本并存入變量boardstream,即為所需要的數據流

}

streamwriter saveapage = new streamwriter( “c:/a.html” , false , system.text.encoding.getencoding( "gb2312" ) );//實例化寫入類,保存路徑假設為c:/a.html

saveapage.write(rich.text);//創建寫入任務

saveapage.flush();//寫入文件(即清理緩存流)

saveapage.close();//關閉寫入類的對象

好了,這樣便完成了一個網頁的下載。最簡化問題解決!

 

好了,下面的問題是,如何獲得更多的網頁?可以分兩步:

1.    得到更多的地址

2.    下載地址指向的鏈接內容(和上面下載一頁的方法一樣)

循環進行上面兩步即可以完成蜘蛛的全部功能了 '

要得到更多的地址,最好的辦法是模擬人使用網頁的辦法。我們平時怎么瀏覽整個網站?無非是從主頁依次點開各層鏈接而已。好了,思路出來了:

分析已經下載的主頁文本,提取其中所有的url地址信息,再依次下載得到的url地址指向的鏈接即可。

現在網絡上有不少web2.0的網站了,這對解析url地址有不小的負面作用。在web2.0出現前,所有的鏈接都是在href后面出現的,而現在卻沒有了這樣的關鍵字,地址可能出現于任何的關鍵字之后。怎么辦呢?

經過大量分析,筆者發現:其實現在所有的鏈接還有一個共性,即都包裹在雙引號(””)當中,這便對解析提供了極大的方便。筆者將鏈接分為兩類:

1.    完整鏈接,即:”http://www.163.com”類,其前面有明顯的標志http://,這樣的內容很好提取,只要用string的靜態方法indexof()找出http://的位置以及從此位置算起第一個“””出現的位置(即鏈接結束的位置),再用substring()方法將地址提取出來即可。

2.    非完整鏈接,其形式一般為”/index.htm”,提取方法和完整鏈接的方法相同,只是判斷它是不是鏈接上有一定難度(因為屬性等其它信息也可能以“”/”開頭,這時就很難判斷了。筆者采取的方法是試下載,即下載一下試試,如果超時剛不是,不超時剛是。注意:要在它的前面加上根地址,如“http://www.163.com/index.htm”。

 

好了,我想蜘蛛的所有功能已經實現了吧?嘿嘿'

只是這樣一個蜘蛛程序怕是效率萬般低下,因為它只有一個線程,光解析下一層的鏈接都要花上不少時間,怎么辦呢?當然是采取更優化的辦法:多線程

 


 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 当涂县| 正阳县| 凤庆县| 南雄市| 礼泉县| 潜山县| 建宁县| 阿克陶县| 黄石市| 洱源县| 河津市| 磴口县| 广西| 张掖市| 高碑店市| 淮滨县| 桦南县| 新泰市| 巨鹿县| 黑水县| 大石桥市| 富平县| 高陵县| 泊头市| 英德市| 班玛县| 赤城县| 大城县| 横山县| 烟台市| 布拖县| 汝城县| 湖北省| 新乐市| 墨竹工卡县| 枞阳县| 高台县| 柏乡县| 兴国县| 英德市| 大竹县|