使用c#,WINFORM所写。
一,新建一个窗体,放入一个WebBrowser.
二,在Form1_Load里指定Url,在WebBrowser的DocumentCompleted事件里写入下面代码。
List<HtmlElement> tempLink = webBrowser1.Document.GetElementsByTagName("a").Cast<HtmlElement>().ToList();
tempLink.ForEach(s =>
{
if (s.OuterHtml.Contains(ConfigurationManager.AppSettings["Filter1"]) && s.InnerHtml.Contains(ConfigurationManager.AppSettings["Filter2"]))
{
s.Click += new HtmlElementEventHandler(Link_Click);
}
});
三,给需要获取的a添加Click事件。
private void Link_Click(object sender, HtmlElementEventArgs e)
{
string url = this.webBrowser1.StatusText;
if (!url.Equals(""))
{
string rowPath = ConfigurationManager.AppSettings["XPath"];
Hashtable ht = TableHelper.ParsingWeb(url, rowPath);
MessageBox.Show(ht.Count.ToString());
}
}
四,添加处理获取到的HTML标签的类。
public static Hashtable ParsingWeb(string url, string rowPath)
{
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
HtmlNode row = doc.DocumentNode.SelectSingleNode(rowPath);
Hashtable htTable = new Hashtable();
var tableRows = row.SelectNodes("//tr").ToList();
tableRows.ForEach(s=> {
string strText = Regex.Replace(s.InnerHtml, "<[^>]+>", "");
strText = Regex.Replace(strText, "&[^;]+;", "");
//去除\r\n\t以及空格,获取到相应td里面的数据
var line = strText.Split(new char[] { '\r', '\n', '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
htTable.Add(line[0], line[1]);
});
return htTable;
}
五。获取的参数放在App.config里。