热搜:NVER node 开发 php

简单php采集网页部分文字问题,求指点,多谢

2024-09-14 21:50:01
简单php采集网页部分文字问题,求指点,多谢

本帖最后由 hi_5461 于 2013-06-09 15:54:50 编辑

目标采集页面如下代码(示例页面,数据可能变化,但格式不会变化)
要求得到table中主要的4项数据:序 号、违法时间、违法地点、违法行为(即93行~130行之间的)
希望能给出详细一点的php代码。
交警查询
  • 网站首页
  • 沈阳交警
  • 交通新闻
  • 视频播放
  • 为您服务
  • 在线办公
  • 信息查询
  • 征求意见
  • 联系我们
返回首页 / 设为首页 / 添加搜藏

在线查询 / 电子警察拍照信息

电子警察拍照信息 小型汽车 辽AQ007B
序 号 违法时间 违法地点 违法行为
1 2013-02-0711:16 沈阳市永安路 违停,驾驶人不在现场,妨碍其他车辆行人通行的
2 2013-03-0808:34 沈阳市三好街文萃路由南向北 通过路口遇停止信号时,停在停止线以内或路口内的
3 2013-03-2210:16 沈阳市三好街文萃路4号 违停,驾驶人不在现场,妨碍其他车辆行人通行的
4 2013-05-1413:53 沈阳市永安路 违停,驾驶人不在现场,妨碍其他车辆行人通行的
5 2013-05-3113:29 沈阳市五里河街 违停,驾驶人不在现场,妨碍其他车辆行人通行的

友情连接:

Copyright 2009 www.sygajj.gov.cn All Rights Reserved
版权所有:沈阳市交通警察支队 E-maill:webmaster@www.sygajj.gov.cn 辽ICP备07501079号 邮编:110003
站长统计


回复讨论(解决方案)

preg_match_all('#(\d+)\s*(.+)\s*(.+)\s*(.+)#isU',$s,$m);print_r($m);

preg_match_all('#(\d+)\s*(.+)\s*(.+)\s*(.+)#isU',$s,$m);print_r($m);

不用正则能实现吗?

你这个需求用正则是最方便的,还想怎么样。


preg_match_all('#(\d+)\s*(.+)\s*(.+)\s*(.+)#isU',$s,$m);print_r($m);

不用正则能实现吗?

正则在这种情况下使用是再好不过了

不知道我调用的对不对,但是输出结果中出现了我不想要的字符。

?Array(    [0] => Array        (            [0] => 1    	2013-02-0711:16    	 沈阳市永安路    	 违停,驾驶人不在现场,妨碍其他车辆行人通行的            [1] => 2    	2013-03-0808:34    	 沈阳市三好街文萃路由南向北    	 通过路口遇停止信号时,停在停止线以内或路口内的            [2] => 3    	2013-03-2210:16    	 沈阳市三好街文萃路4号    	 违停,驾驶人不在现场,妨碍其他车辆行人通行的            [3] => 4    	2013-05-1413:53    	 沈阳市永安路    	 违停,驾驶人不在现场,妨碍其他车辆行人通行的            [4] => 5    	2013-05-3113:29    	 沈阳市五里河街    	 违停,驾驶人不在现场,妨碍其他车辆行人通行的        )    [1] => Array        (            [0] => 1            [1] => 2            [2] => 3            [3] => 4            [4] => 5        )    [2] => Array        (            [0] => 2013-02-0711:16            [1] => 2013-03-0808:34            [2] => 2013-03-2210:16            [3] => 2013-05-1413:53            [4] => 2013-05-3113:29        )    [3] => Array        (            [0] =>  沈阳市永安路            [1] =>  沈阳市三好街文萃路由南向北            [2] =>  沈阳市三好街文萃路4号            [3] =>  沈阳市永安路            [4] =>  沈阳市五里河街        )    [4] => Array        (            [0] =>  违停,驾驶人不在现场,妨碍其他车辆行人通行的            [1] =>  通过路口遇停止信号时,停在停止线以内或路口内的            [2] =>  违停,驾驶人不在现场,妨碍其他车辆行人通行的            [3] =>  违停,驾驶人不在现场,妨碍其他车辆行人通行的            [4] =>  违停,驾驶人不在现场,妨碍其他车辆行人通行的        ))

我是这样调用的:
$s = $p->post($remote_server,$post_string);preg_match_all('#(\d+)\s*(.+)\s*(.+)\s*(.+)#isU',$s,$m);print_r($m);

上面的结果中,从第3行至第25行,是我不想要的,而且第47行中出现了空格,这也不是我想要的,求解决代码,多谢!

$s = $p->post($remote_server,$post_string);preg_match_all('#(\d+)\s*(.+)\s*(?: )*(.+)\s*(?: )*(.+)#isU',$s,$m);print_r($m);

$m 的 1 到 4 下标依次表示为 序号、时间、地点、内容

$s = $p->post($remote_server,$post_string);preg_match_all('#(\d+)\s*(.+)\s*(?: )*(.+)\s*(?: )*(.+)#isU',$s,$m);print_r($m);

$m 的 1 到 4 下标依次表示为 序号、时间、地点、内容
试了一下,结果还是与原来的一样,空格字符没能过滤掉

preg_match_all('#(\d+)\s*(.+)\s* (.+)\s* (.+)#isU',$s,$m);

preg_match_all('#(\d+)\s*(.+)\s* (.+)\s* (.+)#isU',$s,$m);
这回正确了
还有个小问题,就是我得到的$m有时会是空数组,没有值,这个怎么能判断一下呢?因为不能正确得到结果时我需要重新执行一遍查询,谢谢!以下是返回空数组时的结果:

Array(    [0] => Array        (        )    [1] => Array        (        )    [2] => Array        (        )    [3] => Array        (        )    [4] => Array        (        ))

为空时你的数据不是上面那种格式吧,你判断$m[0] 是否为空数组就可以了。
if(empty($m[0])){
重新执行一遍查询
}

为空时你的数据不是上面那种格式吧,你判断$m[0] 是否为空数组就可以了。
if(empty($m[0])){
重新执行一遍查询
}
让你说着了,为空时,不是上面的格式,正则会出错,呵呵,所以判断要在正则之前了。应该判断$s里是否有“验证码输入有误,请重新输入!”,但不知道怎么写?

    			验证码输入有误,请重新输入!	    	        

用strpos() 判断就行吧?

出错时会出现上面那个提示是吧?

if(strpos($s,'验证码输入有误,请重新输入!') !==false){
.....重新执行一遍查询....
}

出错时会出现上面那个提示是吧?

if(strpos($s,'验证码输入有误,请重新输入!') !==false){
.....重新执行一遍查询....
}
又遇到个需要正则的地方,我不会写,帮我看下吧,多谢了
目标页面地址:http://218.25.58.44/searchsys/
需要采集的数据是:“数据最后更新至2013年6月9日”
求规则!

目标在183行,下面是这个页面的源码:

交警查询
  • 网站首页
  • 沈阳交警
  • 交通新闻
  • 视频播放
  • 为您服务
  • 在线办公
  • 信息查询
  • 征求意见
  • 联系我们
返回首页 / 设为首页 / 添加搜藏

电子警察拍照信息
车型 车牌号 车辆识别代码后四位 验证码

驾驶员信息
档案编号 身份证号码 验证码





数据最后更新至2013年6月9日

友情连接:

Copyright 2009 www.sygajj.gov.cn All Rights Reserved
版权所有:沈阳市交通警察支队 E-maill:webmaster@sygajj.gov.cn 辽ICP备07501079号 邮编:110003

preg_match('#

(.+?)
#',$s,$m);
echo $m[1];

女生的问题回答就是快哦。