【问题标题】:Web Scraper - PHP - Simple html domWeb Scraper - PHP - 简单的 html dom
【发布时间】:2018-08-13 19:13:02
【问题描述】:

我正在抓取电子商店。我有 url 列表,加载它们然后刮表。好。第一页是对的,它可能有 30 个参数。下一页如果有 20 个参数并且在复制它们之前没有页面中的参数。这就是我的问题,为什么?也许我只是不知道如何清除数组,你能帮我吗?

//The code
foreach($odkazy as $odkaz) {
	
	//Here i am loading each page
	$html = new simple_html_dom();
	$html->load_file($odkaz);
  	
	//Finding code of prodcut
	$ptyp = $html->find("span.p-type");
	foreach($ptyp as $a)
	$item["p-type"] = trim($a->plaintext);



	//Here are values of product
	$hodnoticky = $html->find("dd");
	foreach($hodnoticky as $h) 
	$hodnota[] = preg_replace('/\s\s+/', ' ',$h->plaintext);
	
	//Here are parameters
	$parametrici = $html->find("dt");
	foreach($parametrici as $p) 
	$parametr[] = preg_replace('/\s\s+/', ' ',$p->plaintext);

	//Here i am mixing them.
	foreach($parametr as $i => $key) 
	$item[trim($key)] = $hodnota[$i];
	
					
	$items[] = $item;


	
	$html->clear();
	unset($html);

}

print_r($items);

【问题讨论】:

  • 您能否再解释一下您的问题。我真的无法理解第 1 页和第 2 页之间的区别。
  • 好吧.. 假设你在第一页参数功率 = 60W,好吗?但是在第二页上没有任何力量.. 但它显示它是.. 如果它们丢失,它会从第一页复制参数
  • 啊,这是因为您可能永远不会清除 for 循环中页面之间的 $items 数组。我将在下面提出一个解决方案。

标签: php web-scraping


【解决方案1】:

看起来 item 数组在循环之间永远不会取消设置。试试这个:

foreach($odkazy as $odkaz) {

   // ... rest of your code here    
   $items[] = $item;
   $html->clear();
   unset($item); // ADD THIS HERE 
   unset($html);

}

print_r($items);

【讨论】:

  • 嗯,这是我想到的第一件事,但结果还是一样。
  • 最奇怪的是数组在取消设置后是空的..难道不是赋值的问题吗?
【解决方案2】:

哦.. 谢谢@JacobW。问题出在另一个数组中。我试图取消设置 $item .. 但解决方案是使用值和参数取消设置数组。谢谢!

	$items[] = $item;
	$html->clear();
	unset($parametr);
	unset($hodnota);
	unset($item); 
	unset($html);

【讨论】:

  • 啊听起来不错。在文件末尾取消设置的另一种方法是在文件顶部定义每个变量。通过在顶部定义,您仍然可以收集垃圾并且代码看起来更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 2012-01-17
相关资源
最近更新 更多