当前位置: 代码迷 >> 综合 >> HtmlAgilityPack1.8.5所写的根据URL解析网页,获取TABLE里的内容,包含源码
  详细解决方案

HtmlAgilityPack1.8.5所写的根据URL解析网页,获取TABLE里的内容,包含源码

热度:50   发布时间:2023-10-14 22:00:39.0

使用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里。

源码下载

 

  相关解决方案