最近公司需要開發乙個簡歷匯入功能,類似部落格搬家或者郵箱搬家,之前抓取資訊是利用火車採集器,但是簡歷匯入功能需要使用者登陸以後才能獲取簡歷資料,無奈只好自己開發了。
首先是遇到的問題是:如何實現模擬登陸?
我們知道一般的**都是通過cookies來維護狀態的,我抓的**也是支援利用cookies來驗證使用者的,構造乙個post資料報,向伺服器提交資料,在配置火車採集器的時候,也是要先利用wsockexpert.exe工具獲得post資料報,之後修改使用者名稱和密碼,向伺服器提交的。
提交了登陸資料後還沒完成登陸,雖然伺服器會返回登陸後的頁面資料,但是如果在進入其他的鏈結頁面,還是不允許的,因為伺服器每次都需要通過你提交過去cookies來驗證你是否登陸,在asp.net裡,利用cookies儲存身份驗證票證,每次都需要向伺服器提交的,初學asp.net總是弄不明它的form驗證機制,它封裝了太多資訊,雖然用幾行**就能實現驗證,後來看了些web開發基礎知識才弄明白,在這個你需要儲存上次登陸後返回的cookies,在下次有其他請求時帶上這個cookies就可以了,怎麼帶上呢?下面是我在.net裡的實現,很簡單!
利用httpwebrequest類的cookiecontainer來儲存,這個cookiecontainer會儲存伺服器回傳的cookies,但是前提是你在初始化httpwebrequest的時候,記得例項化這個cookiecontainer,一般的請求不需要例項它的,簡單的**如下:
為了能全域性使用這個cookiecontainer ,你可以把它作為全域性變數,這樣在下次request的時候將其賦給cookiecontainer 屬性就行了。
詳細了解cookiecontainer 見:
維護了這個cookiecontainer 後,我們就可以訪問登陸後的頁面了,模擬登陸問題解決。
其次遇到的問題自然是:如果從網頁上獲得想要的資訊?
要在網頁抓取資訊,實現起來最簡單,同時也是最繁瑣的方法,那就是模板方法獲取了,從火車採集器的配置過程看出來,它也就是用這種方法而已,不過人家能把抓取器做成成熟的產品,並且熱賣,這個比不了,所以成功與否不完全取決於技術,火車採集器雖然配置起來挺繁瑣,但是用起來還不錯。
用這種方式你需要做個乙個模板,你需要知道目標網頁的結構,知道要找的資訊在什麼地方,之後記錄在它的前面和後面的字串,你可以利用擷取字串的方式獲得目標資訊,也可以利用正則標式獲得,要保證前面和後面的字串是唯一的,很簡單,計算一下,或者匹配一下就可以獲得目標資訊,但是實際做起來還是會遇到一些問題:
下面是我遇到問題;
1.首先我是想利用正規表示式匹配,但是模組裡設定的字首和字尾裡有回車換行/r/n,結果總是匹配不成功,我正則的功底很差,最後知道怎麼回事了,把/r/n替換成(/s*),問題解決,您可以想出為什麼了吧?
2.利用字串擷取方式獲取,在正則還不是很精通,用這種方式最保險了,但是在擷取字串前記得調整下目標頁**,從xml配置檔案裡讀取的字首和字尾中可能有回車和換行,但是回車換行在不同系統裡字元表現是不一樣的,windows裡是/r/n,linux裡是/n,所以要記得統一。
3.前字尾不唯一,有時在頁面裡有兩個不同的目標資訊,但卻有相同的字首,比如:
資料庫軟體工程師
如果用相同的字首就比較難截到想要的資訊了,我想了個辦法,當然方法可能比較笨,但是問題解決了,也是火車給我的啟示,利用多個字串定位目標資訊,比如我想抓去 軟體工程師 ,字首就是:
*在資訊可能不同的地方用*代替,類似萬用字元,這樣利用*將乙個字串切割為兩個,先找到第乙個,之後以這個索引位置為起點,再找第二個字串,這樣就可以定位到最終的資訊了,同樣可以用多個字串三個或更多,這樣實現是解決了問題,希望有更好的方式,希望以後會改進。
4.在抓取資訊的時候還可以利用mithtmlpparser,這是乙個開源的類庫,在codeproject找搜到的,將網頁內的所以標籤都分析出來,如果獲取資訊不是很多、很碎的話,用這個也比較好用,只需知道那個最終要得到資訊在那個標籤裡,然後直接取出就行了。
好了,希望在新的一年裡能學到更多,能經得住考驗!
網頁標題資訊採集
之前做了乙個通過ip來掃瞄 的,以為能掃到所有的 因為ip是能全部遍歷的,但是忘記了很多 是禁止反向解析的。所以更改了寫法,仿照類似爬蟲的方法,抓取乙個網頁的內容,然後遍歷其中的 然後根據其中的 再去遍歷內容,如此做了個簡單的網頁標題資訊採集工具.更新,1.使用多執行緒處理 2.使用快取技術減少db...
如何通過C 實現網頁資訊採集的方法總結
一 通過httpwebresponse來獲取 這是一種比較通用的獲取方式。二 通過webresponse來獲取 相對來說,這是一種最簡單的獲取方式。匹配下面這段 三 通過webclient 來獲取 這是一種很簡單的獲取方式,當然,其它的獲取方法也很簡單。在這裡首先要說明的是,如果為了實際專案的效率考...
C 網頁資訊採集 資料訪問
using system using system.collections using system.collections.specialized using system.data using system.data.sqlclient using system.configuration pu...