前兩天寫了關於網頁分頁資料抓取的文章,但只提到了兩種方式,因為當時原創的文章打字真的很辛苦,所以第三種方式沒有寫,今天將第三種方式也貼出來,和大家分享一下;
前面的文章已經提到了,第三種方式是用代碼類比手動翻頁,這種方式應該可以處理任何形式的翻頁資料,原理就是,用代碼類比人工點擊翻頁連結,用代碼一頁一頁的翻頁,然後一頁一頁的抓取。
正所謂外行看熱鬧,內行看門道,很多人可能看到這裡就會說用Webbrowser這可控制項就可以實現,對,我下面的這種方式就是用WebBrowser的這個控制項來實現,其實在.net下這種類似的類應該還有,但我沒有去研究過,也希望如果有人有其他的方式,可以回複我,與大家一起分享。
WebBroser控制項可是在自己的程式中內嵌一個瀏覽器,就像IE,Firefox之類的一樣,你也可以用他開發自己的瀏覽器,至於用它開發的瀏覽器的效果怎麼樣,我覺得肯定是不如IE和Firefox了。呵呵
我們還是 閑言少敘,切入主題:
使用WebBroser控制項基本上可以實現你在IE中操作網頁的任何功能,所以點擊翻頁按鈕當然也是可以的了,那既然可以在WebBroser中可以手動點擊翻頁按鈕,自然我們用程式碼同樣可以指使WebBroser自動替我們翻頁了。
其實原理很簡單,主要分以下幾個步驟:
第一步,開啟你想抓取的頁面 比如:http://www.zxskb.com/zr/list_O.html
調用webBrowser控制項的方法Navigate("http://www.zxskb.com/zr/list_O.html");
此時,你應該在你的WebBrowser控制項中看到你的網頁資訊,和IE中看到的是一樣的;
第二步 ,WebBrowser控制項的這個事件DocumentCompleted 很重要,當你訪問的頁面全部載入完之後,會觸發這個事件。所以我們分析頁面元素的過程也需要在這個事件內完成
string _ResponseStr=this.WebBrowser1.Document.Body.OuterHtml;
這句代碼可以得到當前開啟頁面的html元素的內容。
既然已經得到當前開啟頁面的html元素的內容了,剩下的工作自然就是解析這個大字串,得到自己關心的內容,解析字串的過程,大家應該自己都能寫了。
第三步, 重點在這第三步呢,因為要翻頁了,接第二步,解析完字串之後,還是在DocumentCompleted事件中,調用方法
WebBrowser1.Document.GetElementById("頁碼的id").InvokeMember("click");
從代碼的方法名種大家應該能明白了,那麼調用完這個方法,之後WebBrwoser控制項內的網頁就實現了翻頁,和你用手去點翻頁按鈕是一樣的效果。
重點在於,翻頁之後,還會觸發DocumentCompleted事件,所以進入了第二步,第三步的迴圈了,所以大家需要注意判斷跳出迴圈的時機
其實用WebBrowser還能幹很多事情,比如自動登入,登出某個論壇,儲存session, cockie,所以 這個控制項基本上可以實現你想對網頁的任何操作,哪怕你是想暴利破解一個網站的登入密碼,當然這個是不提倡的了。呵呵
這裡想和大家說一下 上面那個地址 是我本人的站,正所謂 盜亦有道,請大家不要拿這個技術來抓我的資料,主要是擔心我的伺服器承受不住太大的壓力
另外 我在我的站上添加了一個站長隨筆的小功能,我也會定期在我的站上發布一些自己的心得,有興趣的可以去看看,
這篇分頁抓取資料的文章,就算是我第一個隨筆吧,我已將兩篇文章整理後放到我的站上了,
大家有興趣可以去看看 http://www.zxskb.com/bbs/3.html
同時 本人用delphi也寫了一個單機版的火車時刻表查詢的小程式,純綠色的軟體,不需要連網,不需要安裝,不需要資料庫,600k的小程式,直接運行,占記憶體小
有興趣的也可以到 http://www.zxskb.com/update/ 下載一下,很適合經常出差 上網有不方便的人士使用
有需要抓取資料的 可以聯絡我 QQ 7132600