背景
通过模拟登陆,我获取了相应网页信息,接下来要做的就是解析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();
}
问题 & 解决
需要的材料
引用HtmlAgilityPack,地址http://htmlagilitypack.codeplex.com/
ScrapySharp,提供css选择器,更加方便(我没找到,所以没用上,用HtmlAgilityPack就可以解决我的问题)form问题
HtmlAgilityPack是在DOM上层级式解析,但是form这一层没有用上,需要跳过这一层(提示:一层层向下写然后验证,会避免很多错误)参考的博客
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解析, 现在尝试的就这些,根据系统需求后面继续研究吧