繁体   English   中英

如何从URL中提取内容?

[英]How to extract contents from URLs?

我遇到了问题。 这是我必须要做的,代码运行时间极长:
有一个网站我需要从中收集数据,为此我需要我的算法访问该网站的15,000个子部分(即www.website.com/item.php?rid= $_id ),其中$_id将是for循环的当前迭代。
以下是问题:

  1. 我目前用于获取每个页面的源代码的方法是file_get_contents ,并且,如您所想,对于15,000多页的file_get_contents ,需要超长时间。
  2. 每个页面包含超过900行代码,但我需要提取的所有代码大约是5行,所以似乎算法通过检索所有900行来浪费大量时间。
  3. 有些页面不存在(即www.website.com/item.php?rid= 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

任何帮助都非常感谢,因为我真的需要一个解决方案!
预先感谢您的帮助!

缺点:不要。

更长:如果你想做这么多工作,你不应该按需做。 在后台做吧! 您可以使用此处的代码或您熟悉的任何其他方法,但不是将其显示给用户,而是可以将其保存在数据库或本地文件中。 每x分钟使用一个cron作业调用此脚本(取决于您需要的时间间隔),并显示本地缓存中的最新内容(无论是数据库还是文件)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM