如何从URL中提取内容?

时间:2014-01-11 10:19:32

标签: php url fetch

我遇到了问题。这就是我必须要做的,代码运行时间极长:
有一个网站我需要从中收集数据,为此我需要我的算法访问该网站的15,000个子部分(即 www.website.com/item.php?rid = $_id < / em>),其中$_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 没有),所以我需要一种在算法尝试获取其内容并浪费大量时间之前快速跳过这些页面的方法。
  4. 简而言之,我需要一种方法,以尽可能快速有效的方式从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
    

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

1 个答案:

答案 0 :(得分:2)

缺点:不要。

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