簡單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 來獲取 這是一種很簡單的獲取方式,當然,其它的獲取方法也很簡單。在這裡首先要說明的是,如果為了實際專案的效率考...