0
我遇到問題。這是我必須做的,代碼運行時間非常長:
有1個網站我需要從中收集數據,並且爲此我需要我的算法訪問本網站的15,000個子部分(即www .website.com/item.php?rid = $_id
),其中$_id
將是for
循環的當前迭代。
這裏有問題:如何從URL中提取內容?
- 我目前使用讓每個頁面的源代碼是
file_get_contents
,並且,你可以想像的方法,它需要超長時間的15,000頁file_get_contents
。 - 每頁包含900多行代碼,但是我需要提取的所有內容大約是5行,所以看起來好像該算法通過檢索所有900行代碼浪費了大量時間。
- ,某些頁面不存在(即可能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
任何幫助都非常感謝,因爲我真的需要一個解決方案!
預先感謝您的幫助!
除非您可以將遠程服務器配置爲每次只提供這5行,否則您需要下載整個文件並提取所需內容。沒有得到解決。你可以[每次測試其存在](http://stackoverflow.com/questions/981954/how-can-one-check-to-see-if-a-remote-file-exists-using-php)避免必須下載不存在的頁面,儘管 – Clive
是那些文件行後面的字節 – sanjeev
的特定字節。您可以使用RollingCurl.RollingCurl允許您使用CURL PHP庫並行處理多個HTTP請求。 [鏈接](https://github.com/takinbo/rolling-curl) – jingyu