Php 如何从URL中提取内容?

Php 如何从URL中提取内容?,php,url,fetch,Php,Url,Fetch,我有个问题。这就是我必须要做的事情,代码需要花费很长时间才能运行: 我需要从一个网站收集数据,为此我需要我的算法访问该网站的15000多个子部分(即www.website.com/item.php?rid=$\u id),其中$\u id将是for循环的当前迭代。 以下是问题: 我目前用于获取每个页面的源代码的方法是file\u-get\u-contents,正如您可以想象的那样,15000多页的file\u-get\u-contents需要超长的时间 每个页面包含900多行代码,但我只需要提取

我有个问题。这就是我必须要做的事情,代码需要花费很长时间才能运行:
我需要从一个网站收集数据,为此我需要我的算法访问该网站的15000多个子部分(即www.website.com/item.php?rid=
$\u id
),其中
$\u id
将是
for
循环的当前迭代。
以下是问题:

  • 我目前用于获取每个页面的源代码的方法是
    file\u-get\u-contents
    ,正如您可以想象的那样,15000多页的
    file\u-get\u-contents
    需要超长的时间
  • 每个页面包含900多行代码,但我只需要提取大约5行代码,因此检索所有900行代码似乎是在浪费大量时间
  • 一些页面不存在(例如,可能www.website.com/item.php?rid=
    2
    存在,但www.website.com/item.php?rid=
    3
    不存在),因此我需要一种在算法尝试获取其内容和浪费大量时间之前快速跳过这些页面的方法
  • 简言之,我需要一种尽可能快速高效地从15000个网页中提取一小部分页面的方法。
    这是我目前的代码

    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
    
    ($\u id=0;$\u id<15392;$\u id++)的
    {
    //******************************************************定位页
    $\u位置=”http://www.website.com/item.php?rid=“$\u id;
    $\u头=@get\u头($\u位置);
    if(strpos($_头[0],“200”)==FALSE){
    继续;
    }//如果结束,则结束
    $\源=文件\获取\内容($\位置);
    //******************************************************提取价格
    $\u needle\u initial=“当前价格:”;
    $_针_终端=”;
    $\位置\首字母=(条带($\源,$\针\首字母))+strlen($\针\首字母);
    $\位置\终端=条带OS($\源,$\针\终端);
    $\长度=$\位置\端子-$\位置\初始值;
    $\当前\价格=条带\标签(修剪(substr($\源,$\位置\初始,$\长度));
    }//结束
    
    任何帮助都是非常感谢的,因为我真的需要解决这个问题

    提前感谢您的帮助

    缺点是:不要


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

    除非您可以将远程服务器配置为每次仅提供这5行内容,否则您需要下载整个文件并提取所需内容。别想绕过去。您每次都可以使用RollingCurl来避免下载不存在的页面,尽管这些文件行位于特定字节的字节之后。RollingCurl允许您使用CURL PHP库并行处理多个HTTP请求。[链接]()