webservice+linq
一、 在网页爬数据
1、先获得页面的所有html文本
2、用正则表达式确定需要抓取的数据
3、用IsMatch方法获得匹配的数据后存盘
int pagesize = Convert.ToInt32(txtPageSize.Text.Trim());//获取到总共有多少页
WebClient wc = new WebClient(); //创建实例
wc.Encoding = Encoding.Default; //确定编码方式
for (int i = 1; i <= pagesize; i++) //循环指定页码数的次数
{
string url = txtUrl.Text.Trim() + "?pn="; //URL上加上get传参的方式传递页码
if (string.IsNullOrEmpty(txtUrl.Text.Trim())) //判断是否输入URL
{
return;
}
url += i; //加页码
、、string html = wc.DownloadString(url); //获取到当前页的html内容
MatchCollection mc = Regex.Matches(html, @"[1-9][0-9]{4,11}@(qq|QQ).com"); //匹配正则表达式
StringBuilder sb = new StringBuilder();
foreach (Match m in mc) //对获得的正则匹配结果做循环处理
{
sb.AppendLine(m.Value + ";"); //每一个匹配的结果做一行数据处理
}
string s = sb.ToString(); //StringBuilder转为字符串
File.AppendAllText(@"d:\1.txt", s, Encoding.Default); //把字符串追加保存在文本文件中
}
二、webservice
1、用于不同的系统之间的数据通信。
2、实例
A、在web服务项目中添加【web服务(asmx)】类文件。
B、如果web服务需要验证时在web服务开始时做用户名/密码的验证。
C、调用web服务
1)线添加相关web服务的引用:
引用-->添加服务引用-->高级-->添加web引用-->指定服务的url-->指定web引用名称-->添加引用
2) 当修改了web服务内容时除了重新生成外,需要更新web服务:
Web Referrences中找web服务项-->点击更新web服务
D、火车时刻表web服务实例:traintime
traintime.TrainTimeWebService s = new traintime.TrainTimeWebService(); //创建服务实例
string strStart = txtStart.Text.Trim(); //接受始发站
string strEnd = txtEnd.Text.Trim(); //接受终点站
DataTable dt = s.getStationAndTimeByStationName(strStart, strEnd, "").Tables[0]; //获得表结构的结果集
GridView1.DataSource = dt; //结果集指定为GridView的数据源
GridView1.DataBind(); //绑定GridView
E、飞机时刻表web服务:airtime
airtime.DomesticAirline d = new airtime.DomesticAirline();
string strStart = txtStart.Text.Trim(); //接受始发机场
string strEnd = txtStart.Text.Trim(); //接受到达机场
string strFromTime = txtStart.Text.Trim(); //接受起飞日期范围的开始日期
string strToTime = txtStart.Text.Trim(); //接受起飞日期范围的结束日期
DataTable dt = d.getDomesticAirlinesTime(strStart, strEnd,strFromTime,strToTime).Tables[0]; //获取结果集
GridViewataSource = dt; //结果集指定为GridView的数据源
GridView1.DataBind(); //绑定GridView
F、发布方法
与其他页面的发布时一样的,然后使用时直接告诉url就可以。
三、Linq
1、概念
LINQ对任何数据类型的集合进行筛选的操作,如:数组,集合,哈希表,字典之类的数据都可以用LINQ来筛选。
2、实例
A、List<string> names = new List<string> { "ni", "dsad", "Jsdsds", "fsd" };
var nameWithJ = from n1 in names where n1.StartsWith("J") orderby n1 select n1;
//在names集合中取出以[J]开头的所有元素
//n1 in names:表示n1是遍历names集合用的临时变量
//from n1 in names:表示数据源就是names的集合
//where n1.StartsWith("J"):筛选条件是n1当中第一字符为[J]的
//orderby n1:排序方式是以n1中的内容
//select n1:筛选结果返回的字段序列
B、List<Racer> rs = new List<Racer>() { //创建一个对象集合
new Racer{Wins = 21, Country = "China"},new Racer{Wins=11,Country="China"},
new Racer{Wins=14,Country="USA"},new Racer{Wins=22,Country="China"},
new Racer{Wins=21,Country="China"},new Racer{Wins=35,Country="China"},
new Racer{Wins=44,Country="China"},new Racer{Wins=66,Country="USA"},
new Racer{Wins=44,Country="Japan"}};
var rs1 = from r in rs //对rs对象集合为数据源
group r by r.Country into g //以Country作为group by的分组因素,结果放入对象g中
orderby g.Count() descending, g.Key //根据Count排序,当Count相同的时候根据Key排序
where g.Count() >= 2 //只要累计数量大于等于2的
select new{KeyName=g.Key ,Count=g.Count()}; //返回有两个字段KeyName和Count的对象集合
foreach (var r in rs1) //遍历查询结果集
{
Console.WriteLine(r.KeyName.ToString()); //显示返回结果集的第一个字段值
Console.WriteLine(r.Count.ToString()); //显示返回结果集的第二个字段值
}