表格采集

由于网页中的table表格每一行、每一列没有明显的classid,让很多人对采集表格感觉束手无策。

下面演示如何通过伪选择器来采集表格。

示例

采集代码:

  1. use QL\QueryList;
  2. $html =<<<STR
  3. <div>
  4. <table>
  5. <tr>
  6. <td>姓名</td>
  7. <td>年龄</td>
  8. <td>职位</td>
  9. </tr>
  10. <tr>
  11. <td>Rae</td>
  12. <td>29</td>
  13. <td>医生</td>
  14. </tr>
  15. <tr>
  16. <td>Marsh</td>
  17. <td>56</td>
  18. <td>牧师</td>
  19. </tr>
  20. <tr>
  21. <td>Solomon</td>
  22. <td>18</td>
  23. <td>作家</td>
  24. </tr>
  25. </table>
  26. </div>
  27. STR;
  28. $table = QueryList::html($html)->find('table');
  29. // 采集表头
  30. $tableHeader = $table->find('tr:eq(0)')->find('td')->texts();
  31. // 采集表的每行内容
  32. $tableRows = $table->find('tr:gt(0)')->map(function($row){
  33. return $row->find('td')->texts()->all();
  34. });
  35. print_r($tableHeader->all());
  36. print_r($tableRows->all());

采集结果:

  1. Array
  2. (
  3. [0] => 姓名
  4. [1] => 年龄
  5. [2] => 职位
  6. )
  7. Array
  8. (
  9. [0] => Array
  10. (
  11. [0] => Rae
  12. [1] => 29
  13. [2] => 医生
  14. )
  15. [1] => Array
  16. (
  17. [0] => Marsh
  18. [1] => 56
  19. [2] => 牧师
  20. )
  21. [2] => Array
  22. (
  23. [0] => Solomon
  24. [1] => 18
  25. [2] => 作家
  26. )
  27. )