当前位置:Gxlcms > PHP教程 > 网页表格信息抓取

网页表格信息抓取

时间:2021-07-01 10:21:17 帮助过:7人阅读

页面源代码如下:

假设页面为test.html,且最后一个表格Part Information的内容不固定,可能是1行也可能是多行。
如果要求抓蓝色字体部分怎么做?寻求解决方案。


回复讨论(解决方案)

循环table的tr,直接抓取td的值

这个页面本身返回数据的时候就有蓝色在上面吗?若是,则

              
aaaaaa
aaaaaa
aaaaaa xxxx(aaaaaa)
aaaaaa xxxx
adress aaaaaa adress
交货计划单
计划到达时间 2013-09-16
PUS编号 770266110 版本00
Customer 客户
*DYNP-770266110-00*

Delivery Information 交货信息
工厂
Plant
xxxxxx
取货时间
Pick Up Time
2013-09-09 16:30 需要供应商反馈
Need Duns Response
N
交货日期
Delivery Date
2013-09-16 窗口时间
Window Time
16:30
卸货口
Dock
CC-70D 卸货口负责人
Dock Incharger
kkk
卸货口电话
Dock Tel
011-1111 卸货口地址
Dock Address
adress
交货地点
Delivery Place
计划跟踪员
Follow Up
kkkk 计划跟踪员电话/传真
FollowUp Tel/Fax
011-1111
交货说明
Delivery Note

Part Information 零件清单
序号 零件号 零件说明 需求数量 承诺数量 实收数量 包装数 料箱数 料箱号 实发料箱号 实发料箱数 实收料箱号 实收料箱数 备注
1 12647212 60 60 15 4 P000000D
2 12654172 615 615 15 41 P000000D

';$result = array();preg_match_all('#(.*)#iUus',$string,$result);print_r($result[1]);


本身要是没蓝色的(id,class之类的也没有的)话那就只能全部单元格正则匹配出来按页面结构需要来取了

本身要是没蓝色的(id,class之类的也没有的)话那就只能全部单元格正则匹配出来按页面结构需要来取了
本身无颜色区分,只是我标识出来的罢了。

$s 为你提供的页面内容

preg_match_all('##isU', $s, $r);$r = array_map('trim', array_map('strip_tags', $r[0]));print_r($r);
Array(    [0] =>      [1] => aaaaaa aaaaaa    [2] => aaaaaa xxxx(aaaaaa)    [3] => aaaaaa xxxx    [4] => adress                   aaaaaa adress    [5] =>     [6] => 交货计划单    [7] => 计划到达时间   2013-09-16    [8] => PUS编号                   770266110   版本00    [9] => Customer 客户    [10] => *DYNP-770266110-00*    [11] =>      [12] => Delivery Information             交货信息    [13] => 工厂Plant    [14] => xxxxxx    [15] => 取货时间Pick Up             Time    [16] => 2013-09-09  16:30    [17] => 需要供应商反馈Need Duns             Response    [18] => N    [19] => 交货日期Delivery             Date       [20] => 2013-09-16    [21] => 窗口时间Window             Time    [22] => 16:30    [23] => 卸货口Dock    [24] => CC-70D    [25] => 卸货口负责人Dock Incharger    [26] => kkk    [27] => 卸货口电话Dock Tel    [28] => 011-1111    [29] => 卸货口地址Dock Address    [30] => adress    [31] => 交货地点Delivery             Place    [32] =>     [33] => 计划跟踪员Follow Up    [34] => kkkk    [35] => 计划跟踪员电话/传真FollowUp             Tel/Fax    [36] => 011-1111    [37] => 交货说明Delivery Note    [38] =>     [39] => Part Information 零件清单    [40] => 序号    [41] => 零件号    [42] => 零件说明    [43] => 需求数量    [44] => 承诺数量    [45] => 实收数量    [46] => 包装数    [47] => 料箱数    [48] => 料箱号    [49] => 实发料箱号    [50] => 实发料箱数    [51] => 实收料箱号    [52] => 实收料箱数    [53] => 备注    [54] => 1    [55] => 12647212    [56] =>     [57] => 60    [58] => 60    [59] =>     [60] => 15    [61] => 4    [62] => P000000D    [63] =>     [64] =>     [65] =>     [66] =>     [67] =>     [68] => 2    [69] => 12654172    [70] =>     [71] => 615    [72] => 615    [73] =>     [74] => 15    [75] => 41    [76] => P000000D    [77] =>     [78] =>     [79] =>     [80] =>     [81] => )
读取某项内容不是什么难事吧?
//第二个表从下标 40 开始,14 列$t = array_chunk(array_slice($r, 40), 14);for($i=1; $i  
Array(    [0] => Array        (            [序号] => 1            [零件号] => 12647212            [零件说明] =>             [需求数量] => 60            [承诺数量] => 60            [实收数量] =>             [包装数] => 15            [料箱数] => 4            [料箱号] => P000000D            [实发料箱号] =>             [实发料箱数] =>             [实收料箱号] =>             [实收料箱数] =>             [备注] =>         )    [1] => Array        (            [序号] => 2            [零件号] => 12654172            [零件说明] =>             [需求数量] => 615            [承诺数量] => 615            [实收数量] =>             [包装数] => 15            [料箱数] => 41            [料箱号] => P000000D            [实发料箱号] =>             [实发料箱数] =>             [实收料箱号] =>             [实收料箱数] =>             [备注] =>         ))

preg_match_all('##isU', $s, $r);

这个正则这么用啊?感谢!

preg_match_all('##isU', $s, $r);
如果有的页面取的值的项不同,怎么求那些项?
例如:[10] => *DYNP-770266110-00* ,有时候是[12] => *DYNP-770266110-00*。
但是前一项的值都是一样的,只是键值不同。例:[9] => Customer 客户这项。

那就是你的问题了
一般说明文字与数据总是配对的,并且说明文字在前,数据在后

那就是你的问题了
一般说明文字与数据总是配对的,并且说明文字在前,数据在后

如果在1楼之前还有一个table,那么array_combine会有一个warning提示。

      
Supplier Signature Carrier Signature
供应商签字
_____________ 承运商签字 _____________
Supplier Confirm Time
供应商确认时间 13-09-10 09:01
Receiver Signature
收货人签字
_______________

Date 日期
______________
*** END OF PAGE ***

如何把这个table的信息过滤掉?

人气教程排行