我有一個簡單的任務。 從頁面中獲取所有文章,以及獲取每篇文章的所有圖片。PHP簡單的HTML DOM解析器:獲取所有文章
今天,我決定用PHP Simple HTML DOM Parse
舉個例子,我用下面的代碼:
<?php
include("simple_html_dom.php");
$sitesToCheck = array(
array(
'url' => 'http://googleblog.blogspot.ru/',
'search_element' => 'h2.title a',
'get_element' => 'div.post-content'
),
array(
// 'url' => '', // Site address with a list of of articles
// 'search_element' => '', // Link of Article on the site
// 'get_element' => '' // desired content
)
);
$s = microtime(true);
foreach($sitesToCheck as $site)
{
$html = file_get_html($site['url']);
foreach($html->find($site['search_element']) as $link)
{
$content = '';
$savePath = 'cachedPages/'.md5($site['url']).'/';
$fileName = md5($link->href);
if (! file_exists($savePath.$fileName))
{
$post_for_scan = file_get_html($link->href);
foreach($post_for_scan->find($site["get_element"]) as $element)
{
$content .= $element->plaintext . PHP_EOL;
}
if (! file_exists($savePath) && ! mkdir($savePath, 0, true))
{
die('Unable to create directory ...');
}
file_put_contents($savePath.$fileName, $content);
}
}
}
$e = microtime(true);
echo $e-$s;
我會盡量只得到文章沒有圖片。但是,我從服務器獲取
響應「120秒最長執行時間超過了」
。
請向我解釋,我做錯了什麼......
告訴我,有沒有其他的辦法讓所有的每個項目具體地址在文章的所有照片?
這麼多的 「簡單」 的一部分,誒。 :)儘管如此,上次我檢查過它(幾個月前),simple_html_dom仍然是一堆熱氣騰騰的東西。 DOMDocument + DOMXPath佔用了空間和時間的1/5。從字面上看。通過消除它,我減少了80%的內存使用量和運行時間。 – cHao
你不應該過分依賴這個,但是如果你事先知道一個過程需要很長時間,試試'set_time_limit(0)',但是在任何地方使用它都不是一個好習慣。如果超過最大執行時間(在你的情況下爲120秒),那麼這將阻止php殺死你的進程,並且它會一直運行直到它結束。問題是......如果你在程序中犯了一個錯誤,導致永遠運行,你的程序將在服務器上佔用資源,直到採取手動操作。 – ILikeTacos
就這樣,我聽起來不像一個狂熱的仇敵,有一件事simple_html_dom可能會有好處。如果你的HTML損壞嚴重,不再看起來像HTML,那麼DOMDocument可能無法很好地處理它。像simple_html_dom *這樣的lib可能會更好地處理這種垃圾,因爲它的設計與古怪的標記一起工作。但是很少有必要解析一個非常糟糕的文檔,DOMDocument無法處理它。至少,我從來沒有處理過它。 – cHao