欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

网页表格信息抓取

程序员文章站 2022-05-07 09:01:58
...
页面源代码如下:
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


假设页面为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的信息过滤掉?