【数据抓取】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();
}

问题 & 解决

  1. 需要的材料
    引用HtmlAgilityPack,地址http://htmlagilitypack.codeplex.com/
    ScrapySharp,提供css选择器,更加方便(我没找到,所以没用上,用HtmlAgilityPack就可以解决我的问题)

  2. form问题
    HtmlAgilityPack是在DOM上层级式解析,但是form这一层没有用上,需要跳过这一层(提示:一层层向下写然后验证,会避免很多错误)

  3. 参考的博客
    http://blog.csdn.net/hongsejiaozhu/article/details/43274615
    http://www.cnblogs.com/bearhb/archive/2012/08/14/2637870.html
    http://www.cnblogs.com/TianFang/p/4804289.html
    http://blog.csdn.net/lee576/article/details/44708907


小结

随着获取数据的成功,接下来的工作就是处理、存储、显示
技术点实现之后,重新整理需求,再合并模块,优化整个系统
关于html解析, 现在尝试的就这些,根据系统需求后面继续研究吧

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值