dever 1 year ago
parent
commit
930a1d8185
5 changed files with 24 additions and 10 deletions
  1. 1 0
      database/data.php
  2. 12 0
      database/project.php
  3. 5 5
      lib/Api.php
  4. 5 4
      lib/Parse.php
  5. 1 1
      src/Data.php

+ 1 - 0
database/data.php

@@ -97,6 +97,7 @@ return array
 			'desc' 		=> '使用状态',
 			'match' 	=> 'is_numeric',
 			'option' 	=> $use,
+			'search'	=> 'select',
 			'update'	=> 'radio',
 			'list'		=> true,
 		),

+ 12 - 0
database/project.php

@@ -160,6 +160,18 @@ return array
 			//'edit'		=> true,
 		),
 
+		'collect_list_rule'		=> array
+		(
+			'type' 		=> 'varchar-500',
+			'name' 		=> '采集列表规则-采集列表规则,仅支持dom解析,采集字段如果在列表页中,需要定义好该规则,json格式无需定义本规则',
+			'default' 	=> '',
+			'desc' 		=> '采集规则',
+			'match' 	=> 'option',
+			'update'	=> 'textarea',
+			//'edit'		=> true,
+			//'list'		=> true,
+		),
+
 		'collect_rule'		=> array
 		(
 			'type' 		=> 'varchar-500',

+ 5 - 5
lib/Api.php

@@ -181,7 +181,7 @@ class Api
 			$this->page($config['param'], 3, $config, $col, $set);
 		} else {
 			Dever::load('spider/lib/project')->set($config, 4, 1);
-			$this->parse($config['site'], $config['id'], $config['collect_rule'], $config['curl'], $col, $set, $config['push']);
+			$this->parse($config['site'], $config['id'], $config['collect_list_rule'], $config['collect_rule'], $config['curl'], $col, $set, $config['push']);
 		}
 		/*
 		Dever::task(function() use($config, $this)
@@ -202,15 +202,15 @@ class Api
 		return Dever::db('spider/set')->getList(['where_pid' => $project]);
 	}
 
-	private function parse($url, $project, $rule, $param, $col, $set, $push)
+	private function parse($url, $project, $list_rule, $rule, $param, $col, $set, $push)
 	{
 		$test = Dever::input('test');
 		if ($test == 1) {
-			$parse = new Parse($url, $project, $rule, $param, $col, $set, $push);
+			$parse = new Parse($url, $project, $list_rule, $rule, $param, $col, $set, $push);
 			return $parse->get();
 		}
 		try {
-			$parse = new Parse($url, $project, $rule, $param, $col, $set, $push);
+			$parse = new Parse($url, $project, $list_rule, $rule, $param, $col, $set, $push);
 			return $parse->get();
 		} catch (\Exception $e) {
             return false;
@@ -241,7 +241,7 @@ class Api
 				} else {
 					$config['curl']['param'] = $site_page;
 				}
-				$this->parse($site, $config['id'], $config['collect_rule'], $config['curl'], $col, $set, $config['push']);
+				$this->parse($site, $config['id'], $config['collect_list_rule'], $config['collect_rule'], $config['curl'], $col, $set, $config['push']);
 			}
 		}
 	}

+ 5 - 4
lib/Parse.php

@@ -10,7 +10,7 @@ class Parse
 	private $doc = array();
 	private $data = array();
 
-	public function __construct($url, $project, $rule, $param, $col, $set, $push)
+	public function __construct($url, $project, $list_rule, $rule, $param, $col, $set, $push)
 	{
 		$doc = Doc::getInstance($url, $rule);
 		$doc->log(new Log($project));
@@ -31,10 +31,10 @@ class Parse
 						if (is_string($v) && !strstr($v, 'http')) {
 							$v = $host . ltrim($v, '/');
 						}
-						$this->data[$k] = $this->load($doc, $k, $v, $col, $set, $push, $project, $v);
+						$this->data[$k] = $this->load($doc, $k, $v, $col, $set, $push, $project, $v, $list_rule);
 					}
 				} else {
-					$this->data = $this->load($doc, 0, $data, $col, $set, $push, $project, $url);
+					$this->data = $this->load($doc, 0, $data, $col, $set, $push, $project, $url, $list_rule);
 				}
 			}
 		}
@@ -46,7 +46,7 @@ class Parse
 		return $this->data;
 	}
 
-	private function load($doc, $index, $data, $col, $set, $push, $project, $source)
+	private function load($doc, $index, $data, $col, $set, $push, $project, $source, $list_rule)
 	{
 		if (!$col) {
 			if (Dever::input('test') == 1) {
@@ -64,6 +64,7 @@ class Parse
 
 		if (isset($col[2])) {
 			$data = $doc->getCur();
+			$data = $doc->find($data, $list_rule . '.eq('.$index.')');
 			$this->getCol($doc, $col[2], $data, $result, $table, $source);
 		}
 

+ 1 - 1
src/Data.php

@@ -17,7 +17,7 @@ class Data
 		}
 		foreach ($data as $k => $v) {
 			$col = Dever::db('spider/col')->one(array('key' => $k));
-			if ($col && $col['type'] < 3 && strlen($v) < 1000) {
+			if ($col && $col['type'] < 3 && strlen($v) < 2000) {
 				$result[$col['name'] . '('.$k.')'] = $v;
 			}
 		}