標籤:blog http io ar for sp 檔案 資料 div
首先大家需要清楚一點的是:任何網站的頁面,無論是php、jsp、aspx這些動態網頁面還是用背景程式產生的靜態頁面都是可以在瀏覽器中查看其HTML源檔案的。
所以當你要開發資料擷取程式的時候,你必須先對你試圖採集的網站的前台頁面結構(HTML)要有所瞭解。
當你對要採集資料的網站裡的HTML源檔案內容十分熟悉之後,剩下程式上的事情就很好辦了。因為C#對Web網站進行資料擷取其原理就在於“把你要採集的頁面HTML源檔案下載下來,分析其中HTML代碼然後抓取你需要的資料,最後將這些資料儲存到本地檔案”。
基本流程如所示:
首先引用System.Net命名空間
using System.Net;
此外還需引用
using System.Text;
using System.IO;
引用完後執行個體化一個WebClient對象
private WebClient wc = new WebClient();
調用DownloadData方法將指定網頁的源檔案下載一組BYTE資料,然後將BYTE數組轉為字串。
//下載頁面源檔案並將其轉換成UTF8編碼格式的STRING
string mainData = Encoding.UTF8.GetString(wc.DownloadData(string.Format("你要採集的網頁地址")));
或則也可以調用DownloadFile方法,先將源檔案下載到本地然後再讀取其字串
//下載網頁源檔案到本地
wc.DownloadFile("你要採集的網頁URL","儲存源檔案的本地檔案路徑");
//讀取下載下來的源檔案HTML格式的字串
string mainData = File.ReadAllText("儲存源檔案的本地檔案路徑",Encoding.UTF8);
有了網頁HTML格式字串,就可以對網頁分析採集並抓取你所需要的內容了。
2.頁面分析採集
頁面分析就是要將網頁源檔案中某個特定或是唯一的字元(串)作為抓取點,以這個抓取點作為開端來截取你想要的頁面上的資料。
以部落格園為列,比方說我要採集部落格園首頁上列出來的文章的標題和連結,就必須以"<a class="titlelnk" href=""作為抓取點,以此展開來抓取文章的標題和連結。
CODE:
//以"<a class="titlelnk" href=""作為抓取點開始採集
mainData=mainData.Substring(mainData.IndexOf("<a class="titlelnk" href="") + 26);
//擷取文章頁面的連結地址
string articleAddr = mainData.Substring(0,mainData.IndexOf("""));
//擷取文章標題
string articleTitle = mainData.Substring(mainData.IndexOf("target="_blank">") + 16,
mainData.IndexOf("</a>") - mainData.IndexOf("target="_blank">") - 16);
注意:當你要採集的網頁前台HTML格式變了之後,作為抓取點的字元竄也因做相應地改變,否則是採集不到任何東西的
3.資料儲存
當你把需要的資料從網頁截取下來後,將資料在程式中稍加整理儲存到本地檔案(或插入到自己本地的資料庫中)。這樣整個採集工作就算搞一段落了。
//輸出資料到本地檔案
File.AppendAllText(CreateFolderIfNot(Settings.Default.OutPath) + articleTitle + ".txt",
articleData,
Encoding.UTF8);
C# 採集頁面