最近公司要求做抓取网站资源数据的功能,而且需要将返回的数据进行分类,只返回有用的数据,这就需要用到正则表达式,运用下列代码实现了上述功能,这是个.NET webservice实现的功能,希望对以后有同样需求的兄弟提供帮助。
ps:正则表达式写的不太好,应该会有更好更简洁的方式满足需求,希望大牛赐教。
[WebMethod] public String getResourceSearchMsg(String cityId,String pageNo) { try { WeiXinBase.HttpNetRequest request = new WeiXinBase.HttpNetRequest(); StringBuilder sbuilder = new StringBuilder(); sbuilder.Append("url"); if (cityId != null && !"".Equals(cityId)) { sbuilder.Append("&super_id=" + cityId); } if (pageNo == null || "".Equals(pageNo)) { sbuilder.Append("&dev_page_number = 0"); } else { sbuilder.Append("&dev_page_number = " + pageNo); } request.Url = sbuilder.ToString(); request.Senddata = "super_id=10"; request.RMethod = WeiXinBase.Method.POST; //模拟发送url请求返回的数据 String message = request.PageRequest(); //过滤\n 转换成空 String withoutNString = message.Replace("\n", ""); //过滤\r 转换成空 String withoutRString = withoutNString.Replace("\r", ""); //过滤\t 转换成空 String withoutTString = withoutRString.Replace("\t", ""); //过滤\ 转换成空 String newString = withoutTString.Replace("\\", ""); //获取html中的body标签 String bodyStr = Regex.Match(newString, @"<body.*>.*</body>").ToString(); //过滤注释 String result2 = Regex.Replace(bodyStr, @"<!--(?s).*?-->", "", RegexOptions.IgnoreCase); //过滤nbsp标签 String result3 = Regex.Replace(result2, @" ", "", RegexOptions.IgnoreCase); //获取body中的所有table Regex regex = new Regex(@"<table.*?>[\s\S]*?<\/table>"); MatchCollection mc = regex.Matches(result3); //获取集合类中自己需要的某个table String newHtmlStr = mc[3].ToString(); //将数据返回 //Response.Write(newHtmlStr); return newHtmlStr; } catch (Exception ex) { return ex.Data.ToString(); } }
以下是获取到的html数据,数据进行过删减,红色部分是有用的数据
<table width="80%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="4">
<img src="img/t-l.png" width="4" height="26" />
</td>
<td>
<div class="inquire-t1">
<img src="img/inquire.gif" width="16" height="16" align="absmiddle" />
查询区
</div>
</td>
<td width="4">
<img src="img/t-r.png" width="4" height="26" />
</td>
</tr>
</table>
<div class="inquire-content">
<FORM name="searchForm" action="resource_anticipation_query_bss1.jsp"
method=post>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr height="30">
<td>
<input name="viewNumber" type="text" id="viewNumber" value="" />
<input type="button" name="button1" id="button1" value="装机地址查询" onclick="queryAll();"
/>
</td>
</tr>
</table>
</FORM>
</div>
</div>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">
<div id="tab">
<div class="Menubox">
<ul>
<li id="one1" onclick="setTab('one',1,3)" class=hover>
分线盒地址
</li>
<li id="one2" onclick="setTab('one',2,3)" class=null>
已有用户地址
</li>
<li id="one3" onclick="setTab('one',3,3)" class=null>
在建社区
</li>
</ul>
</div>
<div class="Contentbox">
<div id="con_one_1" class=hover style=0>
<table width="90%" border="0" cellspacing="0" align="left">
<form name="title1" action="#" method="post">
<input type="hidden" name="super_id" value="10" />
<input id="dev_all_page" type="hidden" name="dev_all_page" value="6128"
/>
</form>
</table>
<div class="clear">
</div>
<hr>
<table width="98%" border="0" cellspacing="0" cellpadding="3">
<tr>
<td align="left" width="5%" height="22">
设备类型
</td>
</tr>
<tr bgcolor="E1FFFF">
<td align="left" id="A_0">
LAN
</td>
</tr>
</table>
</div>
<div id="con_one_2" class=null style=display:none>
<table width="90%" border="0" cellspacing="0" align="left">
<form name="title2" action="#" method="post">
<input type="hidden" name="super_id" value="10" />
<input type="hidden" name="partition_code" value="null" />
<input type="hidden" name="zone_cd" value="020" />
<tr align=left height=25>
<td class="noth" width='23%' align=left>
共819709项 第1 到20项
</td>
</tr>
</form>
</table>
<div class="clear">
</div>
<hr>
<table width="80%" border="0" cellspacing="0" cellpadding="3">
<tr>
<td align="left" width="10%" height="22">
设备类型
</td>
</tr>
</table>
</div>
<div id="con_one_3" class=null style=display:none>
<table width="90%" border="0" cellspacing="0" align="left">
</table>
</div>
</div>
</div>
</td>
</tr>
</table>
相关推荐
通过正则表达式解析http头信息 返回结构体包含: 方法: GET/POST 路径 可选头 GET参数 POST参数 方便开发微型web服务器 ...正则表达式出自AoGo的express库 该库只有5kb,体积小,功能强,效率高!
MongoDB还提供了正则表达式功能的字符串模式使用正则表达式$regex操作符。MongoDB使用PCRE(Perl兼容正则表达式)为正则表达式语言。 不同于文本搜索,我们不需要做任何配置或命令就能直接使用正则表达式。 考虑下包含...
本文实例讲述了PHP使用正则表达式获取微博中的话题和对象名的方法。分享给大家供大家参考。具体实现方法如下: $post_content = @jb51和@twitter在研究用#PHP#的#正则表达式#过滤话题和对象名; $tag_pattern = /\#...
在文件里面,数据的抓取为正则表达式方式抓取数据 实现的方式有。 1.根据文件中出现的字符进行抓取。 2。可以抓取前后2端的中间数据 3。可以抓取前后(不包括前端和后端的数据)的中间的数据。 还有,懒的说了。上...
本文实例讲述了正则表达式实现将MM/DD/YYYY格式的日期转换为YYYY-MM-DD格式的方法。分享给大家供大家参考。具体实现方法如下: 代码如下: <html> <head><title>正则表达式</title></...
Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串。 例如:select * from wp_posts where post_name REGEXP’hello’,可以检索出列post_name中所有包含hello的行 REGEXP’.og’ .是正则...
c++ 发送https POST请求并获取返回数据(包含appKey与appSecret)
基于Python pyqt5的HTTP测试工具源代码,可使用HTTP GET、POST、PATCH、DELETE方法测试网站,可使用正则表达式、XPATH、CSS selector匹配文本
模拟Post抓取数据 模拟Post抓取数据
包含:基础知识、爬虫、正则表达式、网络编程、Flask、Django。 例如: 1、基础篇:python的优缺点、深拷贝和浅拷贝之间的区别是什么、列表和元组之间的区别等; 2、进阶篇:python中如何使用多进制数字?怎样获取...
C# 使用Get或Post请求获取数据 并解析获取到的Json数据
各种网页脚本也都常用“正则表达式”(regular expression)对我们输入的电子邮件地址进行验证,判断是否合法。有的还能分解出用户名和域名。现在用PHP语言实现一下电子邮件地址验证程序,用的是PHP正则表达式库。 ...
H-Viewer一个使用选择器和正则表达式来从网站获取数据的安卓图册阅览器An android feed reader application which fetch data with selector and regular expression.该应用仍处于测试阶段,Bugs 和崩溃都是不可避免...
httpclient模拟post请求json封装表单数据的实现方法 httpclient模拟post请求json封装表单数据的实现方法
这个程序实现的是用正则表达式实现登录验证的一个Demo <1>: <?php if(isset($_POST["sub"])){ $text=$_POST["text"]; $patten='^[0-9]*$'; if(!preg_match($patten,$text,$x)){ echo"[removed]alert('用户...
四种Post请求数据格式和fiddler模拟请求构造。 (一)application/x-www-form-urlencoded数据格式 (二)application/json数据格式 (三)text/xml数据格式 (四)multipart/form-data数据格式
最近在工作中,由于合作商只提供uRL,我这边需要通过HTTP请求Get或Post方式请求Json数据,然后解析JSON格式,解析json我使用的第三方库rapidjson。开发环境是64位win7,VS2015。
本文实例为大家分享了js正则表达式验证登录的具体代码,供大家参考,具体内容如下 代码片段: <!DOCTYPE html> <html> <head> <meta charset=UTF-8> <title>qq登录模拟测试</title...
用HTML页面模拟测试get/post请求,psot请求参数的格式为json串