Dom.php 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. namespace Spider\Lib\Doc;
  3. include(DEVER_APP_PATH . 'third/phpQuery.php');
  4. use Dever;
  5. use phpQuery;
  6. class Dom
  7. {
  8. public static function init($html)
  9. {
  10. return phpQuery::newDocumentHTML($html);
  11. }
  12. public static function find($dom, $rule)
  13. {
  14. list($rule, $attr) = self::each($rule);
  15. $rule = str_replace(array('$', ').', '$dom->find.'), array('$dom->find', ')->', '$dom->'), $rule);
  16. $cmd = '$dom = ' . $rule . ';';
  17. eval($cmd);
  18. return self::findAttr($dom, $attr);
  19. }
  20. public static function each($rule)
  21. {
  22. $attr = '';
  23. if (strpos($rule, '.each().') !== false) {
  24. $temp = explode('.each()', $rule);
  25. $rule = $temp[0];
  26. $attr = '$' . $temp[1];
  27. }
  28. return array($rule, $attr);
  29. }
  30. public static function findAttr($dom, $attr)
  31. {
  32. if (!$attr) {
  33. return $dom;
  34. }
  35. $data = array();
  36. foreach ($dom as $k => $v) {
  37. $data[] = self::find(pq($v), $attr);
  38. }
  39. return json_encode($data, JSON_UNESCAPED_UNICODE);
  40. }
  41. public static function get($data)
  42. {
  43. return pq($data);
  44. }
  45. public static function rule($doc, $dom, $col, $rule, $key)
  46. {
  47. $result = Core::rule($doc, $dom, $col, $rule, $key);
  48. return $result;
  49. }
  50. }