C 資訊採集工具實現

2021-08-25 21:08:03 字數 4241 閱讀 7464

簡單c#資訊採集工具實現

最近想整隻爬蟲玩玩,順便熟悉下正規表示式。

開發環境 vs2008 sql2000

實現方法如下

1.先抓取網頁**

2.通過正則匹配出你需要的內容

比如 頁面中 搜尋結果的標題跟連線位址。具體可以根據你的需要填寫合適的位址跟正則。

3.把匹配出的內容儲存到資料庫中。對其中的資料可以根據需要自己進行處理

具體實現**

1.讀取網頁的**

//設定http頭;

//根據http應答頭來判別編碼

string characterset = response.characterset;

encoding encode;

if (characterset != "")

if (characterset == "iso-8859-1")

characterset = "gb2312";

encode = encoding.getencoding(characterset);

else

encode = encoding.default;

//宣告乙個記憶體流來貯存http應答流

stream receivestream = response.getresponsestream();

memorystream mstream = new memorystream();

byte bf = new byte[255];

int count = receivestream.read(bf, 0, 255);

while (count > 0)

mstream.write(bf, 0, count);

count = receivestream.read(bf, 0, 255);

receivestream.close();

mstream.seek(0, seekorigin.begin);

//從記憶體流裡讀取字串這裡涉及到了編碼方案

streamreader reader = new streamreader(mstream, encode);

char buf = new char[1024];

count = reader.read(buf, 0, 1024);

while (count > 0)

str += new string(buf, 0, 1024);

count = reader.read(buf, 0, 1024);

reader.close();

mstream.close();

catch (exception ex)

getdatafromurl(url);

finally

if (response != null)

response.close();

return str;

2.正則匹配的**

public static arraylist getstring(string reg, string content)

regex r = new regex(reg, regexoptions.compiled);

matchcollection matches = r.matches(content);

arraylist a = new arraylist();

foreach (match m in matches)

string arr = new string[10];

arr[0] = m.groups[1].value;

arr[1] = m.groups[2].value;

arr[2] = m.groups[3].value;

arr[3] = m.groups[4].value;

arr[4] = m.groups[5].value;

arr[5] = m.groups[6].value;

arr[6] = m.groups[7].value;

arr[7] = m.groups[8].value;

arr[8] = m.groups[9].value;

arr[9] = m.groups[10].value;

a.add(arr);

return a;

3.如果抓取的頁面很多 ,可以把多執行緒跟佇列應用過來,提高抓取效率

queuenumbers = new queue();

const int maxcount = 5;//同時執行的最多執行緒數

private static object _lock = new object();

private void test()

while (true)

int i = 0;

lock (_lock)

if (numbers.count == 0)

flag = false;

return;

i = numbers.dequeue();

f(i);

void ssss()

for (int i = 1; i <= 100; i++)//處理的頁面引數 從你好&pg=1 到你好&pg=100

numbers.enqueue(i);

for (int i = 0; i < maxcount; i++)

thread thread = new thread(new threadstart(test));

thread.name = "t" + i.tostring();

thread.start();

private void f(int num)

string str = classlibrary1.class1.getdatafromurl("%c4%e3%ba%c3&pg="+num);

string reg = "]+? target=/"_blank/">([//s//s]+?)";

arraylist a = classlibrary1.class1.getstring(reg, str);

for (int i = 0; i < a.count; i++)

string arr = (string)a[i];

result r = new result();

r.value1 = arr[0];

r.value2 = classlibrary1.class1.html2txt(arr[1]);

resultmanager.addresult(r);

5.常用的一些正規表示式

* 0-多個

? 0-1個

+ 1-多個

+? 盡可能少的匹配

*? 0次或多次,盡可能少

/w 等效於 [a-za-z_0-9]

/w 匹配非單詞

/s 非空

/s 等效於 [ /f/n/r/t/v] 空格,製表 換頁

. 匹配除了換行以為的任何字元

/d 數字

[^>] 除了》以為的字元

[/u4e00-/u9fa5] 漢字

6.**只是實現了資訊採集的主要功能,根據你自己的需要更換採集頁面,跟合適的正規表示式後,可以根據你的需要自動進行採集,對採集到的資料,再根據你的需要自己進行處理。

順便問下 有家是新泰的沒。

C 資訊採集工具實現

簡單c 資訊採集工具實現 最近想整隻爬蟲玩玩,順便熟悉下正規表示式。開發環境 vs2008 sql2000 實現方法如下 1.先抓取網頁 2.通過正則匹配出你需要的內容 比如 頁面中 搜尋結果的標題跟連線位址。具體可以根據你的需要填寫合適的位址跟正則。3.把匹配出的內容儲存到資料庫中。對其中的資料可...

網頁資訊採集實現

最近公司需要開發乙個簡歷匯入功能,類似部落格搬家或者郵箱搬家,之前抓取資訊是利用火車採集器,但是簡歷匯入功能需要使用者登陸以後才能獲取簡歷資料,無奈只好自己開發了。首先是遇到的問題是 如何實現模擬登陸?我們知道一般的 都是通過cookies來維護狀態的,我抓的 也是支援利用cookies來驗證使用者...

如何通過C 實現網頁資訊採集的方法總結

一 通過httpwebresponse來獲取 這是一種比較通用的獲取方式。二 通過webresponse來獲取 相對來說,這是一種最簡單的獲取方式。匹配下面這段 三 通過webclient 來獲取 這是一種很簡單的獲取方式,當然,其它的獲取方法也很簡單。在這裡首先要說明的是,如果為了實際專案的效率考...