1. 程式人生 > >【資料抓取】HTML解析

【資料抓取】HTML解析

背景

通過模擬登陸,我獲取了相應網頁資訊,接下來要做的就是解析html,從裡面篩選出自己需要的內容

這個流程很清晰,獲取資料-篩選資料-儲存資料-顯示資料

功能說明

對html程式碼進行解析,篩選出需要的內容

ps.本次用的是上次模擬登陸儲存的html文字,這兩個模組還沒有組合

程式碼

html程式碼

<html>
    <head>
        <title>事件屬性</title>
        <link href="/resource.ashx/635709062375475691/3/css/page.css"
rel="stylesheet" />
<script src="//resource.ashx/635709062375475691/3/javascript/common.js"></script> </head> <body> <form method="post" action="eventdialog.aspx?eventId=2046" id="form1"> <div class="aspNetHidden"> <input
type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA1MzY5OTk4Nw9kFgICAQ9kFgxmDw8WAh4EVGV4dAUG5rWP6KeIZGQCAQ8PFgIfAAUJMjAxNy8yLzIyZGQCAg8PFgIfAAUJ5p2O6Z2S5p2+ZGQCAw8PFgIfAAUIMTg6NDM6MDBkZAIEDw8WAh8ABSxQYXRoOiAKCVtGaWxlVmlzdGEt5rWL6K+V5Yy6XTpc5a2m5pyv6LWE5paZCmRkAgUPDxYCHwAFBuehruiupGRkZJsHJooEt4hg7kT8NGuc6OGX0d3tGhbCt6nnrpHoXyhd"
/>
</div> <div class="aspNetHidden"> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwKhuZq6DQKAtdPXAQKM54rGBumKkbiesZBA0vTMtI/UD5TTngaEDnEb6xk9TvAzVzh2" /> </div> <table cellpadding="0" cellspacing="10" border="0" style="width: 100%"> <tr> <td style="width: 50px">型別:</td> <td><span id="LabelType">瀏覽</span></td> <td style="width: 50px">日期:</td> <td><span id="LabelDate">2017/2/22</span></td> </tr> <tr> <td>使用者:</td> <td><span id="LabelUser">李小明</span></td> <td>時間:</td> <td><span id="LabelTime">18:43:00</span></td> </tr> <tr> <td colspan="4"> 描述:<br /> <textarea name="TextBoxDescription" rows="2" cols="20" wrap="off" readonly="readonly" id="TextBoxDescription" style="width: 360px; height: 150px; resize:none"> Path: [222伺服器]:\Java資料 </textarea> </td> </tr> </table> <div class="gt-formBottom"><input type="submit" name="Button1" value="確認" onclick="elementDialog.close(); return false;" id="Button1" style="width: 80px" /></div> </form> </body> </html>

後臺程式碼

static void Main(string[] args)
{
    //讀取html文字
    StreamReader sr = new StreamReader("E:\\【Project】\\資料抓取\\html文字.txt", Encoding.Default);
    String htmltxt = sr.ReadToEnd();
    sr.Close();

    //HtmlDocument載入html文字
    HtmlDocument htmldoc = new HtmlDocument();
    htmldoc.LoadHtml(htmltxt);

    //提取html中的需要欄位
    HtmlNode type_node = htmldoc.DocumentNode.SelectSingleNode("/html/body/table/tr[1]/td[2]/span");
    HtmlNode date_node = htmldoc.DocumentNode.SelectSingleNode("/html/body/table/tr[1]/td[4]/span");
    HtmlNode user_node = htmldoc.DocumentNode.SelectSingleNode("/html/body/table/tr[2]/td[2]/span");
    HtmlNode time_node = htmldoc.DocumentNode.SelectSingleNode("/html/body/table/tr[2]/td[4]/span");
    HtmlNode path_node = htmldoc.DocumentNode.SelectSingleNode("/html/body/table/tr[3]/td/textarea");

    //輸出提取的欄位
    Console.WriteLine(date_node.InnerText);
    Console.WriteLine(time_node.InnerText);
    Console.WriteLine(user_node.InnerText);
    Console.WriteLine(type_node.InnerText);
    Console.WriteLine(path_node.InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "")); 
    Console.ReadKey();
}

問題 & 解決

小結

隨著獲取資料的成功,接下來的工作就是處理、儲存、顯示
技術點實現之後,重新整理需求,再合併模組,優化整個系統
關於html解析, 現在嘗試的就這些,根據系統需求後面繼續研究吧