我一直在做一個PHP爬行程序,需要從一個站點獲取所有鏈接並激活這些鏈接(而不是手動點擊或執行客戶端JS)。file_get_contents VS dom-> loadHTMLFile
我已閱讀這些:
和別人多,我決定跟隨1.
到目前爲止,它一直在努力,但我對使用file_get_contents
與dom->loadHTMLFile
的方法有所不同而感到困惑。你可以請這些啓發我和它可能造成的影響,利弊,或簡單與場景。
我一直在做一個PHP爬行程序,需要從一個站點獲取所有鏈接並激活這些鏈接(而不是手動點擊或執行客戶端JS)。file_get_contents VS dom-> loadHTMLFile
我已閱讀這些:
和別人多,我決定跟隨1.
到目前爲止,它一直在努力,但我對使用file_get_contents
與dom->loadHTMLFile
的方法有所不同而感到困惑。你可以請這些啓發我和它可能造成的影響,利弊,或簡單與場景。
實際上這些方法都是這樣做的。但是,使用file_get_contents()
時,除非將結果傳遞給DOMDocument::loadHTML()
,否則至少需要暫時將結果存儲在字符串變量中。這會導致應用程序中的內存使用量增加。
有些網站可能需要您設置一些特殊的頭值,或使用其他HTTP方法比GET
。如果你需要這個,你需要指定一個所謂的流上下文。您可以使用stream_context_create()
實現這一目標的上述兩種方法:
例:
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
$ctx = stream_context_create($opts);
您可以設置使用上述兩種方式這一背景下,但他們在如何實現這一目標不同:
// With file_get_contents ...
$file_get_contents($url, false, $ctx);
// With DOM
libxml_set_streams_context($ctx);
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
葉可說的,是用curl
擴展你將有大約甚至更多的控制權他的HTTP傳輸,在一些特殊情況下可能需要。
'file_get_contents'只是獲取目標網頁包含的所有html,它不知道DOM。對於DOM操作,即使通過'file_get_contents'獲得內容,您仍然必須使用與DOM相關的類 –