Dom.php 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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 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 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 rule($doc, $dom, $col, $rule, $key)
  42. {
  43. if (is_string($dom) && strstr($dom, 'http')) {
  44. $dom = $doc->doc($dom);
  45. } else {
  46. $dom = pq($dom);
  47. }
  48. $result = Core::rule($doc, $dom, $col, $rule, $key);
  49. return $result;
  50. }
  51. }