簡體   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