正则表达式抓数据问题,头疼啊

问题描述

各位高手,本人正完成一个从网上抓数据的程序,因为新老版本数据的网页格式有所不同,正则表达式不能匹配,而且好像还有死循环的问题,哪位高手能帮忙解决一下啊。新数据正则表达式:<atarget='_blank's+href='http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=shd{6}&date=d{4}-d{2}-d{2}'>s*([^s]+)s+</a>s*</div></td>s*<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s新数据样本:<!--历史交易begin--><tablewidth="100%"border="0"align="center"cellpadding="0"cellspacing="10"class="table2"><tr><tdalign="left"valign="top"><formmethod="get"name="daily"action=""><selectname="year"><optionvalue="2011"selected>2011</option><optionvalue="2010">2010</option><optionvalue="2009">2009</option><optionvalue="2008">2008</option><optionvalue="2007">2007</option><optionvalue="2006">2006</option><optionvalue="2005">2005</option><optionvalue="2004">2004</option><optionvalue="2003">2003</option><optionvalue="2002">2002</option><optionvalue="2001">2001</option><optionvalue="2000">2000</option><optionvalue="1999">1999</option><optionvalue="1998">1998</option><optionvalue="1997">1997</option></select><selectname="jidu"><optionvalue="1">一季度</option><optionvalue="2">二季度</option><optionvalue="3">三季度</option><optionvalue="4"selected>四季度</option></select><inputtype="submit"value="查询"></form></td></tr></table><tableid="FundHoldSharesTable"><thead><tr><thcolspan="8">宇通客车(600066)<FONTCOLOR="blue">2011</FONT>年<FONTCOLOR="blue">4</FONT>季度复权历史交易</th></tr></thead><trclass="tr_2"><td><divalign="center"><strong>日期</strong></div></td><td><divalign="center"><strong>开盘价</strong></div></td><td><divalign="center"><strong>最高价</strong></div></td><td><divalign="center"><strong>收盘价</strong></div></td><tdclass="tdr"><divalign="center"><strong>最低价</strong></div></td><tdclass="tdr"><divalign="center"><strong>交易量(股)</strong></div></td><tdclass="tdr"><divalign="center"><strong>交易金额(元)</strong></div></td><tdclass="tdr"><divalign="center"><strong>复权因子</strong></div></td></tr><tr><td><divalign="center"><atarget='_blank'href='http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=sh600066&date=2011-11-22'>2011-11-22</a></div></td><td><divalign="center">235.778</div></td><td><divalign="center">242.439</div></td><td><divalign="center">239.373</div></td><tdclass="tdr"><divalign="center">233.558</div></td><tdclass="tdr"><divalign="center">6829412.000</div></td><tdclass="tdr"><divalign="center">154660496.000</div></td><tdclass="tdr"><divalign="center">10.573</div></td></tr><trclass="tr_2"><td><divalign="center"><atarget='_blank'href='http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=sh600066&date=2011-11-21'>2011-11-21</a></div></td><td><divalign="center">239.479</div></td><td><divalign="center">253.752</div></td><td><divalign="center">240.430</div></td><tdclass="tdr"><divalign="center">236.624</div></td><tdclass="tdr"><divalign="center">15819385.000</div></td><tdclass="tdr"><divalign="center">363487232.000</div></td><tdclass="tdr"><divalign="center">10.573</div></td></tr>老数据正则表达式:<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s+<td[^d]*([^<]*)</div></td>s老数据样本:<!--历史交易begin--><tablewidth="100%"border="0"align="center"cellpadding="0"cellspacing="10"class="table2"><tr><tdalign="left"valign="top"><formmethod="get"name="daily"action=""><selectname="year"><optionvalue="2011">2011</option><optionvalue="2010">2010</option><optionvalue="2009">2009</option><optionvalue="2008">2008</option><optionvalue="2007">2007</option><optionvalue="2006">2006</option><optionvalue="2005">2005</option><optionvalue="2004">2004</option><optionvalue="2003">2003</option><optionvalue="2002">2002</option><optionvalue="2001">2001</option><optionvalue="2000"selected>2000</option><optionvalue="1999">1999</option><optionvalue="1998">1998</option><optionvalue="1997">1997</option></select><selectname="jidu"><optionvalue="1">一季度</option><optionvalue="2">二季度</option><optionvalue="3">三季度</option><optionvalue="4"selected>四季度</option></select><inputtype="submit"value="查询"></form></td></tr></table><tableid="FundHoldSharesTable"><thead><tr><thcolspan="8">宇通客车(600066)<FONTCOLOR="blue">2000</FONT>年<FONTCOLOR="blue">4</FONT>季度复权历史交易</th></tr></thead><trclass="tr_2"><td><divalign="center"><strong>日期</strong></div></td><td><divalign="center"><strong>开盘价</strong></div></td><td><divalign="center"><strong>最高价</strong></div></td><td><divalign="center"><strong>收盘价</strong></div></td><tdclass="tdr"><divalign="center"><strong>最低价</strong></div></td><tdclass="tdr"><divalign="center"><strong>交易量(股)</strong></div></td><tdclass="tdr"><divalign="center"><strong>交易金额(元)</strong></div></td><tdclass="tdr"><divalign="center"><strong>复权因子</strong></div></td></tr><tr><td><divalign="center">2000-12-29</div></td><td><divalign="center">27.273</div></td><td><divalign="center">27.926</div></td><td><divalign="center">27.616</div></td><tdclass="tdr"><divalign="center">27.109</div></td><tdclass="tdr"><divalign="center">3218005.000</div></td><tdclass="tdr"><divalign="center">54368298.000</div></td><tdclass="tdr"><divalign="center">1.633</div></td></tr><trclass="tr_2"><td><divalign="center">2000-12-28</div></td><td><divalign="center">27.273</div></td><td><divalign="center">27.599</div></td><td><divalign="center">27.273</div></td><tdclass="tdr"><divalign="center">27.044</div></td><tdclass="tdr"><divalign="center">343697.000</div></td><tdclass="tdr"><divalign="center">5730195.000</div></td><tdclass="tdr"><divalign="center">1.633</div></td></tr>这两个分别运行是都没有问题,但当新老数据在一起是有悲剧了,当机。。。。。。我判断是老正则表达式的问题新老数据混合样本:<trclass="tr_2"><td><divalign="center"><atarget='_blank'href='http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=sh600066&date=2011-11-01'>2011-11-01</a></div></td><td><divalign="center">222.033</div></td><td><divalign="center">226.580</div></td><td><divalign="center">224.465</div></td><tdclass="tdr"><divalign="center">220.553</div></td><tdclass="tdr"><divalign="center">2691439.000</div></td><tdclass="tdr"><divalign="center">57055752.000</div></td><tdclass="tdr"><divalign="center">10.573</div></td></tr><trclass="tr_2"><td><divalign="center">2000-10-31</div></td><td><divalign="center">25.803</div></td><td><divalign="center">26.309</div></td><td><divalign="center">25.640</div></td><tdclass="tdr"><divalign="center">25.395</div></td><tdclass="tdr"><divalign="center">1338500.000</div></td><tdclass="tdr"><divalign="center">21314681.000</div></td><tdclass="tdr"><divalign="center">1.633</div></td></tr>望高手提携啊能否有针对新老数据的通用表达式

解决方案

解决方案二:
我是用Mtracer进行测试的http://www.regexlab.com/zh/mtracer/download.htm新老数据已经在程序里分别抓取完但合在一起过不去啊
解决方案三:
http://money.finance.sina.com.cn/corp/go.php/vMS_FuQuanMarketHistory/stockid/600066.phtml?year=2006&jidu=2这个是网页,新老数据混在一起,有没有通用的表达式可以抓取这个表格里的数据

时间: 2024-10-23 02:09:28

正则表达式抓数据问题,头疼啊的相关文章

利用正则表达式抓取博客园列表数据_正则表达式

鉴于我在要完成的asp.net MVC 3 仿照博客园企业系统要用到测试数据,我自己输入太累,所以我就抓取了博客园的部分列表数据,还请dudu不要见怪. 在抓取博客园数据的时候采用了正则表达式,所以有不熟悉正则表达式的朋友可以参考相关资料,其实很容易掌握,就是在具体的实例中会花些时间. 现在我就来把我抓取博客园数据的过程叙述一下,如果有朋友有更好的意见,欢迎提出来. 要使用正则表达式抓取数据,首先就要创建一个正则表达式进行匹配,我推荐使用regulator,这个正则表达式工具,我们可以先使用这个

利用正则表达式抓取博客园列表数据

鉴于我在要完成的asp.net MVC 3 仿照博客园企业系统要用到测试数据,我自己输入太累,所以我就抓取了博客园的部分列表数据,还请dudu不要见怪. 在抓取博客园数据的时候采用了正则表达式,所以有不熟悉正则表达式的朋友可以参考相关资料,其实很容易掌握,就是在具体的实例中会花些时间. 现在我就来把我抓取博客园数据的过程叙述一下,如果有朋友有更好的意见,欢迎提出来. 要使用正则表达式抓取数据,首先就要创建一个正则表达式进行匹配,我推荐使用regulator,这个正则表达式工具,我们可以先使用这个

PHP正则表达式抓取某个标签的特定属性值的方法_正则表达式

php正则学了一些日子,抓了一些网站的数据,从而发现每次都自己写正则重新抓很麻烦,于是就想写一个抓取特定标签具有特定属性值的接口通用,直接上代码. //$html-被查找的字符串 $tag-被查找的标签 $attr-被查找的属性名 $value-被查找的属性值 function get_tag_data($html,$tag,$attr,$value){ $regex = "/<$tag.*?$attr=\".*?$value.*?\".*?>(.*?)<\

PHP正则表达式抓取某个标签的特定属性值的方法

php正则学了一些日子,抓了一些网站的数据,从而发现每次都自己写正则重新抓很麻烦,于是就想写一个抓取特定标签具有特定属性值的接口通用,直接上代码. //$html-被查找的字符串 $tag-被查找的标签 $attr-被查找的属性名 $value-被查找的属性值 function get_tag_data($html,$tag,$attr,$value){ $regex = "/<$tag.*?$attr=\".*?$value.*?\".*?>(.*?)<\

使用MemberShip时 用HttpWebRequest抓数据

最近在做一个项目,因为是分层设计,为了各层之间解耦,我们采用了HttpWebRequest来抓取同域下 的文件数据(动态生成的)来生成新的对象.我们生成数据页的handler都是以.do结尾的,以示区分.但是 这也带来了问题,在使用HttpWebRequest抓数据时,通不过验证.但是我们使用AJAX同样也是.do结尾的啊, 却可以使用,奇怪!网上找Membership的验证原理,资料及其缺乏.多是设置cookie之类的,也试了好多次,均 不奏效!事实也证明,当我们禁用cookie时,membe

奉献出一个封装的curl函数 便于调用(抓数据专用)

这个函数就是封装了curl函数的常用步骤,方便大家抓数据,小偷程序也是用类似的代码,需要的朋友可以参考下   奉献出一个封装的curl函数,便于调用 复制代码 代码如下: function curl($url, $ifpost = 0, $datafields = '', $cookiefile = '', $v = false) { $header = array("Connection: Keep-Alive","Accept: text/html, applicatio

php通过正则表达式记取数据来读取xml的方法

 这篇文章主要介绍了php通过正则表达式记取数据来读取xml的方法,实例分析了php正则表达式的技巧及读取XML文件的方法,需要的朋友可以参考下     本文实例讲述了php通过正则表达式记取数据来读取xml的方法.分享给大家供大家参考.具体分析如下: xml源文件如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 <?xml version="1.0 encoding="UTF-8"?> <humans> <zhangyin

php通过正则表达式记取数据来读取xml的方法_php技巧

本文实例讲述了php通过正则表达式记取数据来读取xml的方法.分享给大家供大家参考.具体分析如下: xml源文件如下: <?xml version="1.0 encoding="UTF-8"?> <humans> <zhangying> <name>张映</name> <sex>男</sex> <old>28</old> </zhangying> <t

httpunit-java 正则表达式 抓取2行特定中文词语中的一段中文

问题描述 java 正则表达式 抓取2行特定中文词语中的一段中文 老师让我们做一个能从汉字网站http://hanyu.iciba.com上抓取汉字信息的爬虫,现在遇到了一个难题,下面是我用httpunit解析出来的某个字的部分信息. 龙 繁体 龍 笔画 5笔 造字法 原为形声 部首 龙部 五笔 DXV 结构 单一结构 比如说现在我要截取这个字的部首,也就是部首和五笔这2行字中间的那段字,那正则表达式是不是就是"部首.五笔",但是这样做了之后什么也没有截取出来,能告诉我怎么写这个表达式