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                 try
11                 {
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                 try
31                 {
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 = 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="/LineDetailQuery?lineId=1&amp;direction=2&amp;">1路(老福山花园站→博览城市场中路站)</a>
10             if (has != null)
11                 foreach (HtmlNode hn in has)
12                     if (hn.Attributes.Contains("href"))
13                     {   //<a href="/LineDetailQuery?lineId=1&amp;direction=2&amp;">1路(老福山花园站→博览城市场中路站)</a>
14                         string href = 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                                     try
35                                     {
36                                         conn.Open();
37                                         string strSql = "update 线路 set 线路号[email protected]线路号, 行向[email protected]行向, 线路名称[email protected]线路名称, 始发站点[email protected]始发站点, 开往方向[email protected]开往方向, 更新时间[email protected]更新时间 where 编号[email protected]编号";
38                                         SqlCommand cmd = new SqlCommand(strSql, conn);
39                                         cmd.Parameters.Add("@线路号", System.Data.SqlDbType.Int, 4).Value = lineId;
40                                         cmd.Parameters.Add("@行向", System.Data.SqlDbType.Int, 4).Value = dir;
41                                         cmd.Parameters.Add("@线路名称", System.Data.SqlDbType.NVarChar, 50).Value = lineName;
42                                         cmd.Parameters.Add("@始发站点", System.Data.SqlDbType.NVarChar, 50).Value = from;
43                                         cmd.Parameters.Add("@开往方向", System.Data.SqlDbType.NVarChar, 50).Value = to;
44                                         cmd.Parameters.Add("@更新时间", System.Data.SqlDbType.DateTime, 4).Value = dtUpdate;
45                                         cmd.Parameters.Add("@编号", System.Data.SqlDbType.Int, 4).Value = 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="/LineDetailQuery?lineId=1&amp;direction=2&amp;">1路(老福山花园站→博览城市场中路站)</a>
62             if (hasPage != null)
63                 foreach (HtmlNode hn in hasPage)
64                     if (hn.Attributes.Contains("style"))
65                         if (hn.Attributes["style"].Value == "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                                     else
81                                         log("==================最后一页===============");
82                             }
83                         }
84             return retVal;
85         }

注:HtmlDocument、HtmlNode、HtmlNodeCollection三个类需要引用一个类库文件。该文件在博客园的后台文件管理中。

时间: 2024-12-09 22:12:28

C#获取网页数据的两个函数的相关文章

【转】如何在Windows+VS2005使用最新静态libcurl 7.35.0获取网页数据,支持HTTPS

地址: http://blog.csdn.net/hujkay作者:Jekkay Hu([email protected])关键词:Windows,curl,ssl,  visual c++ 2005, libcurl, https,网页抓取时间: 2014/2/18 1. 概述 由于Curl提供强大的网络功能,支持HTTP,HTTPS, DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP

[原创]利用爬虫技术获取网页数据,以及想要的指定数据

最近在公司做个系统,由于要获取网页的一些数据,以及一些网页的数据,所以就写的一个公用的HttpUtils.下面是针对乌云网我写的一个例子. 一.首先是获取指定路径下的网页内容. public static String httpGet(String urlStr, Map<String, String> params) throws Exception { StringBuilder sb = new StringBuilder(); if (null != params &&

在php中分别使用curl的post提交数据的方法和get获取网页数据的方法

在php中分别使用curl的post提交数据的方法和get获取网页数据的方法整理分享一下额,具体代码如下: (1)使用php curl获取网页数据的方法: $ch=curl_init(); //设置选项,包括URL curl_setopt($ch,CURLOPT_URL,"http://www.nettuts.com"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HEADER,0); //执行

使用HttpClient进行Get方式通信(使用HttpGet获取网页数据)

1.项目结构 导入jar包 jar包去官网下载解压后项目新建lib目录,将解压包中的lib目录中的zip拷入项目lib目录文件夹,然后build path-->配置到项目中 2.TestGet.java package testhttpclient; import java.io.IOException; import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.cli

获取网页数据的例子

最近,1元购物比较火,这种众筹形式的购物,购买者出很小的费用,就能获得一个得到喜欢的物品.有人说这是个骗局,也有人趋之若鹜的每天在上面购物,这里不做评论.网易也做这个模式,名字是1元云购,1元夺宝. 网易云购 www.1yyg.com的网站上顶部有个累计参与人次的统计,对这个比较好奇,想着统计一个时间段参与人次的变化. 打开网站,加载页面的过程中,打开调试,查看network,注意不断重复的请求: 上面标注的这个请求不断的发送,网页上实时变化也就累计参与人次的统计,这样就确定了请求. 打开这个请

C# 获取网页数据、获取本机IP

说明: (1) http://www.3322.org/dyndns/getip 这个网址可以获取本机IP,读取的内容就是本机IP (2)方法经测试,可以实现. (3)参考:http://www.cnblogs.com/ceachy/articles/CSharp_Retrive_Page_Document.html 两种方法: (1)使用WebClient private static string GetIP(String url) { WebClient MyWebClient = new

VB中获取网页数据

以下是在Microsoft Visual Basic 6.0 中文版下做的 VB可以抓取网页数据,所用的控件是Inet控件. 第一步:单击工程-->部件 选择Microsoft Internet Transfer Control(SP6)控件. 第二步:布局界面显示 在界面里面拖动相对应的控件. 第三步 编码开始 Option Explicit Private Sub Command1_Click() If Text1.Text = "" Then MsgBox "请输

获取网页数据

描述: 将网页数据导入到表格中,在日常工作中经常会用到,此法的好处是省去了手动敲入的时间,如何快速的将网页数据导入到表格中成为了一个焦点问题,下面与大家 分享个比较常用的方法,大概的步骤就是调出新建WEB查询界面,输入网址并转到相应的页面,点击导入,然后等待.....接着设置导入数据的位置单元格, 确定即可.此法只能导入网页文字,图片是无法导入的. 步骤: Step 1:启动Excel2013,单击菜单栏--数据--获取外部数据--自网站. Step 2:弹出新建WEB查询界面,输入网站地址,转

Qt5 http协议 获取网页数据

一.HTTP协议 Qt网络模块提供的API可以实现基于HTTP(Hyper Text Transport Protocol)协议的应用程序.此外, Qt还可以实现多种基于 协议的应用程序, 如位于OSI 7层应用层的FTP.DNS.SNMP. Qt4.x版本提供了QHttp和QFtp类以支持HTTP和FTP协议.从Qt 5.0 版本开始, 删除了QHttp 和 QFtp 类, 通过QNetworkReply .QNetworkAccessManager.QNetworkRequest类实现基于H