首页 > 代码库 > C#获取网页数据的两个函数
C#获取网页数据的两个函数
1.获取网页源码函数
1 string getPageText(string url) 2 { 3 string retVal = ""; 4 dtUpdate = DateTime.Now; 5 labMessage.Text = ""; 6 int pageNo = 1; 7 string strUrl = ""; 8 do 9 { 10 try11 {12 using (var wc = new WebClient())13 {14 wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");15 wc.Encoding = Encoding.UTF8;16 strUrl = url + "&page=" + pageNo;17 log("打开页:" + strUrl + "<br/>");18 string str = wc.DownloadString(strUrl);19 str = str.Replace("<script", "");20 pageNo = procLine(str); //处理获取到的文本21 }22 }23 catch (Exception ee)24 {25 log("获取网页时错误:" + ee.Message);26 }27 } while (pageNo > 0);28 using (SqlConnection conn = new SqlConnection(strConn))29 {30 try31 {32 conn.Open();33 string strSql = "delete from 线路 where 更新时间<>@更新时间";34 SqlCommand cmd = new SqlCommand(strSql, conn);35 cmd.Parameters.Add("@更新时间", System.Data.SqlDbType.DateTime, 4).Value =http://www.mamicode.com/ dtUpdate;36 int sl = cmd.ExecuteNonQuery();37 if (sl > 0) log("删除了未更新的线路:" + sl + "条。");38 }39 catch (Exception ee)40 {41 log("错误:" + ee.Message);42 }43 }44 return retVal;45 }
2.处理所获得的源码
1 int procLine(string strHtml) 2 { 3 int retVal = 0; 4 HtmlDocument htmlDoc = new HtmlDocument(); // 获取html元素(htmlContext为html页面字符串) 5 htmlDoc.LoadHtml(strHtml); // 加载html页面 6 7 HtmlNode node = htmlDoc.DocumentNode; 8 //HtmlNodeCollection has = node.SelectNodes("//div[contains(@onclick, ‘/RealtimeQuery?‘)]"); //获取各条线路的 div 9 HtmlNodeCollection has = node.SelectNodes("//a"); //获取各条线路的 <a href="http://www.mamicode.com/LineDetailQuery?lineId=1&direction=2&">1路(老福山花园站→博览城市场中路站)</a>10 if (has != null)11 foreach (HtmlNode hn in has)12 if (hn.Attributes.Contains("href"))13 { //<a href="http://www.mamicode.com/LineDetailQuery?lineId=1&direction=2&">1路(老福山花园站→博览城市场中路站)</a>14 string href = http://www.mamicode.com/hn.Attributes["href"].Value;15 if (href.StartsWith("/LineDetailQuery?lineId="))16 {17 string[] ss = href.Split(new char[] { ‘?‘, ‘=‘, ‘&‘, ‘;‘ }, StringSplitOptions.RemoveEmptyEntries);18 if (ss.Length > 6)19 {20 int lineId = 0;21 int dir = 0;22 int.TryParse(ss[2], out lineId);23 int.TryParse(ss[5], out dir);24 string[] lineInfo = hn.InnerText.Split(new char[] { ‘(‘, ‘→‘, ‘)‘ }, StringSplitOptions.RemoveEmptyEntries);25 string lineName = lineInfo[0];26 string from = lineInfo[1];27 string to = lineInfo[2];28 int bh = lineId + dir * 100000;29 string str = "lineId={0}, dir={1}, lineName={2}, from={3}, to={4} <br/>";30 log(string.Format(str, lineId, dir, lineName, from, to));31 //将线路更新到数据库32 using (SqlConnection conn = new SqlConnection(strConn))33 {34 try35 {36 conn.Open();37 string strSql = "update 线路 set 线路号=@线路号, 行向=@行向, 线路名称=@线路名称, 始发站点=@始发站点, 开往方向=@开往方向, 更新时间=@更新时间 where 编号=@编号";38 SqlCommand cmd = new SqlCommand(strSql, conn);39 cmd.Parameters.Add("@线路号", System.Data.SqlDbType.Int, 4).Value =http://www.mamicode.com/ lineId;40 cmd.Parameters.Add("@行向", System.Data.SqlDbType.Int, 4).Value =http://www.mamicode.com/ dir;41 cmd.Parameters.Add("@线路名称", System.Data.SqlDbType.NVarChar, 50).Value =http://www.mamicode.com/ lineName;42 cmd.Parameters.Add("@始发站点", System.Data.SqlDbType.NVarChar, 50).Value = http://www.mamicode.com/from;43 cmd.Parameters.Add("@开往方向", System.Data.SqlDbType.NVarChar, 50).Value =http://www.mamicode.com/ to;44 cmd.Parameters.Add("@更新时间", System.Data.SqlDbType.DateTime, 4).Value =http://www.mamicode.com/ dtUpdate;45 cmd.Parameters.Add("@编号", System.Data.SqlDbType.Int, 4).Value =http://www.mamicode.com/ bh;46 if (cmd.ExecuteNonQuery() == 0)47 {48 cmd.CommandText = "insert into 线路(编号, 线路号, 行向, 线路名称, 始发站点, 开往方向, 更新时间)values(@编号, @线路号,@行向,@线路名称,@始发站点,@开往方向,@更新时间)";49 cmd.ExecuteNonQuery();50 }51 }52 catch (Exception ee)53 {54 log("更新线路到数据库时错误:" + ee.Message);55 }56 }57 }58 }59 }60 //<font style="font-size:13px;">[2/26]</font>61 HtmlNodeCollection hasPage = node.SelectNodes("//font"); //获取各条线路的 <a href="http://www.mamicode.com/LineDetailQuery?lineId=1&direction=2&">1路(老福山花园站→博览城市场中路站)</a>62 if (hasPage != null)63 foreach (HtmlNode hn in hasPage)64 if (hn.Attributes.Contains("style"))65 if (hn.Attributes["style"].Value =http://www.mamicode.com/= "font-size:13px;")66 {67 string[] ss = hn.InnerText.Split(new char[] { ‘[‘, ‘/‘, ‘]‘ }, StringSplitOptions.RemoveEmptyEntries);68 if (ss.Length > 1)69 {70 int pageNo = 0;71 int pageTotal = 0;72 int.TryParse(ss[0], out pageNo);73 int.TryParse(ss[1], out pageTotal);74 if (pageTotal > 0)75 if (pageNo < pageTotal)76 {77 log("=================第" + pageNo + "页/共" + pageTotal + "页===========<br/><br/>");78 retVal = pageNo + 1;79 }80 else81 log("==================最后一页===============");82 }83 }84 return retVal;85 }
注:HtmlDocument、HtmlNode、HtmlNodeCollection三个类需要引用一个类库文件。该文件在博客园的后台文件管理中。
C#获取网页数据的两个函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。