我遇到了问题。这就是我必须要做的,代码运行时间极长:
有一个网站我需要从中收集数据,为此我需要我的算法访问该网站的15,000个子部分(即 www.website.com/item.php?rid = $_id
< / em>),其中$_id
将是for
循环的当前迭代
以下是问题:
file_get_contents
,而且,正如您所想象的那样,它需要超长到15,000多页的file_get_contents
。2
存在但 www.website.com/item。 php?rid = 3
没有),所以我需要一种在算法尝试获取其内容并浪费大量时间之前快速跳过这些页面的方法。简而言之,我需要一种方法,以尽可能快速有效的方式从15,000个网页中提取页面的一小部分。
这是我目前的代码。
for ($_id = 0; $_id < 15392; $_id++){
//****************************************************** Locating page
$_location = "http://www.website.com/item.php?rid=".$_id;
$_headers = @get_headers($_location);
if(strpos($_headers[0],"200") === FALSE){
continue;
} // end if
$_source = file_get_contents($_location);
//****************************************************** Extracting price
$_needle_initial = "<td align=\"center\" colspan=\"4\" style=\"font-weight: bold\">Current Price:";
$_needle_terminal = "</td>";
$_position_initial = (stripos($_source,$_needle_initial))+strlen($_needle_initial);
$_position_terminal = stripos($_source,$_needle_terminal);
$_length = $_position_terminal-$_position_initial;
$_current_price = strip_tags(trim(substr($_source,$_position_initial,$_length)));
} // end for
非常感谢任何帮助,因为我真的需要一个解决方案! 提前感谢您的帮助!
答案 0 :(得分:2)
缺点:不要。
更长:如果你想做这么多工作,你不应该按需做。在后台做吧!您可以使用此处的代码或您熟悉的任何其他方法,但不是将其显示给用户,而是可以将其保存在数据库或本地文件中。每x分钟使用一个cron作业调用此脚本(取决于您需要的时间间隔),只显示本地缓存中的最新内容(无论是数据库还是文件)。