因为需要,自己写了个批量查询qs的小软件。从网站中抓出需要的数据,格式化显示:

对字符串进行检测处理,先用Replace函数去掉字符串的空格,再用正则表达式匹配,返回匹配的字符串,如果没有匹配,则返回空字符串:

 //检测输入字符是否合法
private string CheckText(string waitregexstr)
{
waitregexstr = waitregexstr.Replace(" ", "");
string qsregex = "[qQ][sS][0-9]{12}";
return Regex.Match(waitregexstr,qsregex).Value;
}

获取网页内容。这部分我还是不太会,拿了别人的代码。但它就是用用HttpWebRequest和HttpWebResponse的各个函数与stream来获取网页内容。

         #region GetWebContent 根据url返回网页编码

        HttpWebRequest httpReq;
HttpWebResponse httpResp; string strBuff = "";
char[] cbuffer = new char[256];
int byteRead = 0; //string filename = @"c:\log.txt";
///定义写入流操作
public string GetWebContent(string url)
{
url = url.Replace("\r\n", "");
Uri httpURL = new Uri(url); ///HttpWebRequest类继承于WebRequest,并没有自己的构造函数,需通过WebRequest的Creat方法 建立,并进行强制的类型转换
httpReq = (HttpWebRequest)WebRequest.Create(httpURL);
///通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换 httpResp = (HttpWebResponse)httpReq.GetResponse();
///GetResponseStream()方法获取HTTP响应的数据流,并尝试取得URL中所指定的网页内容 ///若成功取得网页的内容,则以System.IO.Stream形式返回,若失败则产生ProtoclViolationException错 误。在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理
Stream respStream = httpResp.GetResponseStream(); ///返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以 //StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾(读取的编码格式:UTF8)
StreamReader respStreamReader = new StreamReader(respStream, Encoding.UTF8); byteRead = respStreamReader.Read(cbuffer, 0, 256); while (byteRead != 0)
{
string strResp = new string(cbuffer, 0, byteRead);
strBuff = strBuff + strResp;
byteRead = respStreamReader.Read(cbuffer, 0, 256);
} respStream.Close();
return strBuff;
}
#endregion 

定义从网页内容中获取特定字符的函数。调用获取网页源码后,对字符串进行多次处理,首先用正则匹配regex.Match匹配到需要的字符串,再用Replace处理函数,得到自己所要显示的函数,这部分如果有大牛有更好的方案,请指教,感谢!

       private string operastr( string textboxtext)
{
try
{
string url = "避嫌,这里去掉了网址" + textboxtext.ToUpper() + ".htm";
string webcontent = GetWebContent(url);
string pattern = @"<h3>[\s\S]*?</table>";
string butifulwoman = "";
Regex regex = new Regex(pattern);
if (regex.IsMatch(webcontent))
{
int flag = 0;
string fatwoman = regex.Match(webcontent).Value;
butifulwoman = fatwoman.Replace("<td class=\"info-field\"><div>", "\r\n").Replace("</div></td>", "").Replace("<td class=\"info-value\"><div style=\"\">", ":").Replace("\n", "").Replace("</tr>", "").Replace("<tr>", "").Replace("</tbody></table>", "").Replace("<table class=\"info-table\"><tbody>", "").Replace("<h3>", "").Replace("</h3>", "").Replace(" ", ""); }
loadingGrid.IsOpen = false;
return butifulwoman;
}
catch (Exception ex)
{
return "";
}
}

定义多行字符串的处理方法。根据TextBox的LineCount属性与getLinetext函数,对字符串进行处理

 //多行字符串的处理
private void MutilpleStr(TextBox tb,Label lb)
{
int k = 0;
string linestr="";
for (int i = 0; i <tb.LineCount; i++)
{
linestr = CheckText(tb.GetLineText(i));
if (linestr == "")
{
wrong("qs格式错误!");
return;
}
else
{ if (lb.Content==null)
lb.Content = operastr(tb.GetLineText(i));
else
{
lb.Content += "\r\n------------------------------------";
lb.Content += "\r\n" + operastr(tb.GetLineText(i)); }
}
} }

  主体。根据用户输入的qs编号行数,分开一行与多行处理,

        if (mutipleText.Text == "")
{
wrong("文本框不能为空!");
// mutipleText.Style =Style("mytextbox");
}
else if (this.mutipleText.LineCount>1)
{
loadingGrid.IsOpen = true;
mutipleText.BorderBrush = Brushes.White;
MutilpleStr(mutipleText,my); }
else if(this.mutipleText.LineCount==1)
{
if (CheckText(mutipleText.Text).Length < 1)
{
wrong("请输入正确的qs!");
return;
}
mutipleText.BorderBrush = Brushes.White; string text = mutipleText.Text.Replace(" ", "");
string myneedstr = operastr(text);
my.Content = myneedstr;
}

最新测试,抓取的数据太快会导致返回的qs全部是同一个,因为抓取的速度太快了,有空我改善下 

项目已经上传: http://files.cnblogs.com/files/ssvip/qs.rar

写了个批量查询qs的软件的更多相关文章

  1. 个人永久性免费-Excel催化剂功能第99波-手机号码归属地批量查询

    高潮过往趋于平静,送上简单的手机号码归属地查询,因接口有数量限制,仅能满足少量数据需求,如有大规模数据却又想免费获得,这就成为无解了,数据有价,且用且珍惜. 业务使用场景 除了日常自带的手机各种管家为 ...

  2. 未注册wang域名批量查询工具

    一.支持规则查询 可自定义生成域名进行查询,可生成任意位数的字母数字域名,根据[声母].[韵母]生成单拼,双拼,三拼等域名,还可根据字典生成,支持全拼.首拼识别,全国城市区号.城市全拼.城市首拼.热门 ...

  3. MongoDB与传统数据库的使用区别——批量插入与批量查询

    我在百X知道上回答问题时经常遇到类似与这样的问题:MongoDB有没有像MySQL一样的ODBC驱动?MongoDB能不能像MySQL一样获取字段名称或类型. 我的回答是:不行,因为MongoDB不是 ...

  4. 【Python】批量查询-提取站长之家IP批量查询的结果加强版本v3.0

    1.工具说明 写报告的时候为了细致性,要把IP地址对应的地区给整理出来.500多条IP地址找出对应地区复制粘贴到报告里整了一个上午. 为了下次更好的完成这项重复性很高的工作,所以写了这个小的脚本. 某 ...

  5. 【Python】批量查询-提取站长之家IP批量查询的结果v1.0

    0 前言 写报告的时候为了细致性,要把IP地址对应的地区给整理出来.500多条IP地址找出对应地区复制粘贴到报告里整了一个上午. 为了下次更好的完成这项重复性很高的工作,所以写了这个小的脚本. 1 使 ...

  6. Shell 命令行,实现对若干网站状态批量查询是否正常的脚本

    Shell 命令行,实现对若干网站状态批量查询是否正常的脚本 如果你有比较多的网站,这些网站的运行状态是否正常则是一件需要关心的事情.但是逐一打开检查那简直是一件太糟心的事情了.所以,我想写一个 sh ...

  7. 个人永久性免费-Excel催化剂功能第97波-快递单号批量查询物流信息

    电商时代,快递已进千万家,做电商零售行业的,快递信息的再挖掘,也显得更有意义,是数据精细化运营中必不可少的一环.一般站在系统的角度,数据用于业务流转的增删改查使用,而对于分析需求来说,这些业务系统里集 ...

  8. Elasticsearch由浅入深(六)批量操作:mget批量查询、bulk批量增删改、路由原理、增删改内部原理、document查询内部原理、bulk api的奇特json格式

    mget批量查询 批量查询的好处就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的如果进行批量查询的话,查询100条数据,就只要发送1次网络请求,网络请求的 ...

  9. mybatis之批量查询

    关于MyBatis批量更新和添加,参考我的如下文章即可:MyBatis的批量更新实例 MyBatis的批量添加实例 另外不管是批量的新增.删除.修改.查询也好,还是单个新增.删除.修改查询也罢.都会用 ...

随机推荐

  1. POJ - 3984 bfs [kuangbin带你飞]专题一

    bfs搜索过程中将路径保存下即可. AC代码 #include<cstdio> #include<cstring> #include<algorithm> #inc ...

  2. json_encode处理json数据中文乱码

    今天使用json_encode 把一个数组转换成json数据,echo处理的时候,显示为null.去查了php手册. 该函数只能接受 UTF-8 编码的数据. 在网上搜了下,找到了解决方法. < ...

  3. 决策树之ID3、C4.5、C5.0等五大算法

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- C5.0决策树之ID3.C4.5.C5.0算法 ...

  4. ReferenceError: Error #1065: 变量 dataGridArray 未定义

    1.错误描述 ReferenceError: Error #1065: 变量 dataGridArray 未定义. at global/flash.utils::getDefinitionByName ...

  5. R语言实现对基因组SNV进行注释

    很多时候,我们需要对取出的SNV进行注释,这个时候可能会在R上进行注释,通常注释文件都含有Chr(染色体).Start(开始位点).End(结束位点).Description(描述),而我们的SNV文 ...

  6. python装饰器理解

    1.装饰器的作用 在不修改被装饰对象的源代码以及调用方式的前提下为被装饰对象添加新功能 原则: 1.不修改被装饰对象的源代码2.不修改被装饰对象的调用方式 目标: 为被装饰对象添加新功能 2.装饰器的 ...

  7. hdu5860 Death Sequence

    这题一开始写的线段数是从中间开始查找 k个 导致是nlogn 每次查找应该都是从头找每次找的个数不同就好了 还有一种递推的写法我放下面了 #include<bits/stdc++.h> u ...

  8. 使用pyh生成HTML文档

    title: 使用pyh生成HTML文档 tags: [python3, 爬虫,pyh] date: 2018-03-09 21:01:34 categories: Python keywords: ...

  9. Redis进阶实践之十六 Redis大批量增加数据

    一.介绍      有时,Redis实例需要在很短的时间内加载大量先前存在或用户生成的数据,以便尽可能快地创建数百万个键.这就是所谓的批量插入,本文档的目标是提供有关如何以尽可能快的速度向Redis提 ...

  10. LightOJ1336 Sigma Function

    题意 求和运算是一种有趣的操作,它来源于古希腊字母σ,现在我们来求一个数字的所有因子之和.例如σ(24)=1+2+3+4+6+8+12+24=60.对于小的数字求和是非常的简单,但是对于大数字求和就比 ...