去年年底的時候曾經發過乙個資料採集器《網頁資料採集器》,那是專門針對某乙個**來進行採集的,如果需要採集新的**內容,就需要修改**並重新編譯。
昨晚完成了乙個帶智慧型策略的採集系統。其實,這個策略的方案三年前就想好了,那時候打算用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提供...