昨天使用shell脚本来抽取html数据的时候,碰到了一个问题,如果要抽取的数据成了如下的情形时,数据的抽取就会出现不一致,有一些记录会没有数据,只显示"未开售" 这个时候如果还是按照原来的思路来抽取就会出现数据混乱的情况,比如根据第一列抽取数据一共有75 行,但是根据右边的赔率只能得到74行,有一行的数据混乱,后面的数据就全乱了。
大体的Html代码如下:
可以看到对应的div FM2,FHMW如果都有数据,都含有3行对应的数据,如果div FMW中只显示“未开售”的时候,只有一行。
这样数据明显的不对应。
需要找到一定的规律来有条件的抽取和过滤。
', title : '选择类型', width : 300, height : 150, scroll : 'no', callback : function(action){ if(action == 'close'){ $.cover(false); } } }); }); $('#admin_delete').live('click' , function(){ ///blog/logicdel/id/3480184/url/%252Fblog%252Findex.html.html var type = $('#del_type').val(); var url = '/blog/logicdel/id/1257616/url/%252F23718752%252F/'; window.location.href= url + '?type=' + type; }); //顶 js中暂未添加&过滤 $('#digg').live('click' , function(){ if(isOnLine == '' ) { //showErrorMsg('登录之后才能进行此操作' , '消息提示'); showErrorMsg('操作失败,您需要先登录!', '消息提示', '/site/login/'); return false; } var bid = $('#digg').attr('bid'); var url = $('#digg').attr('url'); var digg_str = $.cookie('digg_id'); if(digg_str != null) { var arr= new Array(); //定义一数组 arr = digg_str.split(","); //字符分割 for( i=0 ; i '; tpl += '
+1
|
5.80
↑
4.40
1.38
↓
|
2.58↑ 3.55↑ 2.18↓ | |
2 |
未开售
|
1.55↓ 4.30 4.00↑ |
大体的Html代码如下:
可以看到对应的div FM2,FHMW如果都有数据,都含有3行对应的数据,如果div FMW中只显示“未开售”的时候,只有一行。
这样数据明显的不对应。
需要找到一定的规律来有条件的抽取和过滤。
FMW">
6.00
4.30
1.38
6.00
4.30
1.38
FHMW">
2.55
3.50
2.22 "return false;">
0
-2
2.55
3.50
2.22 "return false;">
0
-2
FMW">
未开售
1.53
4.45
4.00
现在来做一个改进,按照div来抽取。
grep "em class=\"vs\"" *e|awk -F"score-text\">" '{print $2}'|awk -F" vs.lst
grep -A4 "div class=\"selection\"" *e|grep -A3 "FMW" |awk '{ if($2~/no-sale/) {print "\"num\">000" '{print $2}'|awk -F" fmw.lst
grep -A9 "div class=\"selection\"" *e|grep -A3 "FHMW" |awk '{ if($2~/no-sale/) {print "\"num\">000" '{print $2}'|awk -F" hfmw.lst
抽取后的数据就会很自然的显示出来,我们把“未开售”的记录设置为0
数据抽取过滤后,结果就会如下所示,数据就不会乱了。
1,3.40,3.35,1.88,1.71,3.65,3.70
2,0,0,0,2.85,4.20,1.85
1,4.90,3.95,1.50,2.24,3.60,2.47
1,7.10,4.80,1.29,2.95,3.75,1.91
1,5.30,3.85,1.48,2.26,3.35,2.58
1,5.00,4.00,1.49,2.25,3.55,2.48
1,3.20,3.40,1.93,1.68,3.75,3.75
阅读(8203) | 评论(0) | 转发(4) |
未开售
1.53
4.45
4.00
现在来做一个改进,按照div来抽取。
grep "em class=\"vs\"" *e|awk -F"score-text\">" '{print $2}'|awk -F" vs.lst
grep -A4 "div class=\"selection\"" *e|grep -A3 "FMW" |awk '{ if($2~/no-sale/) {print "\"num\">000" '{print $2}'|awk -F" fmw.lst
grep -A9 "div class=\"selection\"" *e|grep -A3 "FHMW" |awk '{ if($2~/no-sale/) {print "\"num\">000" '{print $2}'|awk -F" hfmw.lst
抽取后的数据就会很自然的显示出来,我们把“未开售”的记录设置为0
数据抽取过滤后,结果就会如下所示,数据就不会乱了。
1,3.40,3.35,1.88,1.71,3.65,3.70
2,0,0,0,2.85,4.20,1.85
1,4.90,3.95,1.50,2.24,3.60,2.47
1,7.10,4.80,1.29,2.95,3.75,1.91
1,5.30,3.85,1.48,2.26,3.35,2.58
1,5.00,4.00,1.49,2.25,3.55,2.48
1,3.20,3.40,1.93,1.68,3.75,3.75
'; tpl += '文明上网,理性发言...'; tpl += '
'; tpl += '
'; tpl += '
'; tpl += '
'; tpl += '
'; tpl += '
'; tpl += '