多執行緒帶智慧型採集策略的採集系統

2021-09-22 07:21:21 字數 2456 閱讀 3497

去年年底的時候曾經發過乙個資料採集器《網頁資料採集器》,那是專門針對某乙個**來進行採集的,如果需要採集新的**內容,就需要修改**並重新編譯。

昨晚完成了乙個帶智慧型策略的採集系統。其實,這個策略的方案三年前就想好了,那時候打算用vb做,做了一半就擱置了。現在用c#才終於把這個方案實現了。

整個方案大概是這樣的:

需要建立乙個ac資料庫,mssql也行,有四個表:pagetype用於記錄頁面的種類,比如列表頁和詳細頁兩類;url表用於記錄要採集的**,另外還有乙個欄位typeid標明該**屬於哪一種頁面型別,比如是列表頁還是詳細頁;rule表記錄著各種規則,主要有三個字段,fromtypeid源頁型別,totypeid目的頁型別,pattern規則;cjpage用於儲存採集到的網頁內容,還包含**和頁面種類。

採集策略的核心就在於規則庫rule。

工作過程大概這樣:

1,採集執行緒從url表抽取乙個**,並馬上在表中將其刪除,為了防止衝突,這個過程需要用多執行緒同步解決;

2,用webclient請求該**的頁面內容;

3,取得內容後,給執行緒池的執行緒來分析處理,本執行緒回到1,繼續去url表取下乙個**;

4,執行緒池在有空閒執行緒時,會呼叫分析函式parsepage去處理上次獲得的頁面內容;

5,先到rule中取所有fromtypeid為當前**typeid;

6,如果沒有取到任何規則rule,則將本頁內容寫入到cjpage中;

7,如果取到規則,那麼遍歷規則,為每條規則執行parseurl方法;

8,parseurl根據規則的pattern匹配到頁面內容中的所有**,並記錄到url中,規則的totypeid就是url的typeid。

下面是一些核心原始碼(沒有公開的都是一些資料層的添刪改查的**):

以下是**片段:

using system;

using system.collections.generic;

using system.text;

using system.net;

using system.threading;

using cjdata;

using system.text.regularexpressions;

using nlog;

namespace cj

}private thread thread;

public string name = "";

public event writelogcallback onwritelog;

///

/// 開始工作

///

public void start()

///

/// 停止工作

///

public void stop()

private void work());}

}else

}catch (threadabortexception e)

catch (exception e)

}onwritelog(name + " 完成!");

}private void parsepage(object state)

else}}

private void parseurl(url u, rule r, string page)

else

}url.insert();}}

}}以下是**片段:

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.text;

using system.windows.forms;

using system.net;

namespace cj

caiji cjs;

private void button1_click(object sender, eventargs e)

cjs = null;

btn.text = "開始";

return;

}richtextbox1.text = "";

btn.text = "停止";

int k = 100;

if (!int.tryparse(textbox1.text, out k)) k = 100;

cjs = new caiji[k];

for (int i = 0; i < cjs.length; i++)

foreach (caiji cj in cjs)

}void cj_onwritelog(string log));}

else}}

}我不相信神話,我只相信汗水!我不相信命運,我只相信雙手!

分類:

c#,1.首頁原創精華.net區123

python多執行緒採集例項

python多執行緒採集例項 python作為一種流行的指令碼程式語言,其功能的強大自然不言而喻,豆瓣網就是使用python開發的,另外很多的it公司了在使用python,也充分說明了python的強大,下面是python多執行緒採集例項 python多執行緒採集例項 coding gb2312 a...

pthreads多執行緒資料採集

以前使用curl的多執行緒並不是真正的多執行緒,只是一種模擬的多執行緒,現在使用pthreads來實現真正意義上的多執行緒。windows下 mac unix linux下 安裝方式 windows下 解壓得到pthreadvc2.dll和php pthreads.dll檔案,把vc2檔案放到php...

python多執行緒 採集ip並驗證

python因gil的設計使得單cpu同一時刻只能執行乙個執行緒,所以多執行緒在python中主要用於io較多的場景。前段時間需要採集一些免費ip 就應用多執行緒對採集來的 進行目標 的連通性進行批量驗證。python通過兩個標準庫thread和threading提供對執行緒的支援。thread提供...