2014-10-30 23 views
0

我試圖刮掉以下頁面:http://mangafox.me/manga/用簡單的HTML DOM解析器刮,但它突然停止

我想腳本點擊每這些鏈接和刮每個漫畫的細節和爲最部分我的代碼完全是這樣。它可以工作,但由於某種原因,頁面中途停止加載(它甚至沒有通過#列表)。

沒有錯誤信息,所以我不知道我在找什麼。我會很感激我做錯了一些建議。

代碼:

<?php 
include('simple_html_dom.php'); 

set_time_limit(0); 

//ini_set('max_execution_time', 300); 
//Creates an instance of the simple_html_dom class 
$html = new simple_html_dom(); 
//Loads the page from the URL entered 
$html->load_file('http://mangafox.me/manga'); 
//Finds an element and if there is more than 1 instance the variable becomes an array 
$manga_urls = $html->find('.manga_list a'); 


//Function which retrieves information needed to populate the DB from indiviual manga pages. 
function getmanga($value, $url){ 
    $pagehtml = new simple_html_dom(); 
    $pagehtml->load_file($url); 

    if ($value == 'desc') { 
     $description = $pagehtml->find('p.summary'); 
     foreach($description as $d){ 
      //return $d->plaintext; 
      return $desc = $d->plaintext; 
     } 
     unset($description); 
    } else if ($value == 'status') { 
     $status = $pagehtml->find('div[class=data] span'); 
     foreach ($status as $s) { 
      $status = explode(",", $s->plaintext); 
      return $status[0]; 
     } 
     unset($status); 
    } else if ($value == 'genre') { 
     $genre = $pagehtml->find('//*[@id="title"]/table/tbody/tr[2]/td[4]'); 
     foreach ($genre as $g) { 
      return $g->plaintext; 
     } 
     unset($genre); 
    } else if ($value == 'author') { 
     $author = $pagehtml->find('//*[@id="title"]/table/tbody/tr[2]/td[2]'); 
     foreach ($author as $a) { 
      return $a->plaintext; 
     } 
     unset($author); 
    } else if ($value == 'release') { 
     $release = $pagehtml->find('//*[@id="title"]/table/tbody/tr[2]/td[1]'); 
     foreach ($release as $r) { 
      return $r->plaintext; 
     } 
     unset($release); 
    } else if ($value == 'image') { 
     $image = $pagehtml->find('.cover img'); 
     foreach ($image as $i) { 
      return $i->src; 
     } 
     unset($image); 
    } 

    $pagehtml->clear(); 
    unset($pagehtml); 
} 

foreach($manga_urls as $url) { 
    $href = $url->href; 
    if (strpos($href, 'http') !== false){ 
     echo 'Title: ' . $url->plaintext . '<br />'; 
     echo 'Link: ' . $href . '<br />'; 
     echo 'Description: ' . getmanga('desc', $href) . '<br />'; 
     echo 'Status: ' . getmanga('status',$href) . '<br />'; 
     echo 'Genre: ' . getmanga('genre', $href) . '<br />'; 
     echo 'Author: ' . getmanga('author', $href) . '<br />'; 
     echo 'Release: ' . getmanga('release', $href) . '<br />'; 
     echo 'Image Link: ' . getmanga('image', $href) . '<br />'; 
     echo '<br /><br />'; 
    } 
} 

$html->clear(); 
unset($html); 
?> 
+0

工作結果顯示我們的錯誤報告,請。 – 2014-10-30 16:11:27

+0

你的意思是error_log文件?它沒有任何東西(除了之前我從一個白癡得到的錯誤Eg [30-Oct-2014 10:45:15 America/Chicago] PHP致命錯誤:最大執行時間超過30秒在/home1/hashmkb/public_html/manga/simple_html_dom.php在線1622 因此,我把set_time_limit(0);在代碼 – hash004 2014-10-30 16:21:20

+0

因爲我解決了它通過添加set_time_limit(0);除非我做錯了, :S – hash004 2014-10-30 16:41:17

回答

0

所以,它不是一個「只是這樣做」修復,但我做到了;)

旁邊的事實是進口的子頁面的方式太多,也有一個巨大的simple_html_dom來遍歷。它有13307項,而simple_html_dom不是爲了速度或效率而製作的。它爲這種情況下不需要的東西分配了很多空間。這就是爲什麼我用正則表達式替換主simple_html_dom。

我認爲它仍然需要年齡完全加載,並且使用的是一個其他語言的更好,但是這是:-) https://gist.github.com/dralletje/ee996ffe4c957cdccd01

+0

抱歉,遲交回復Michiel我想了解你做了什麼,然後嘗試插入數據庫而不是回顯值。似乎發生了同樣的問題,但持續時間更長。我認爲最好的做法是一次解析一下,而不是一次性解析整個列表。 我真的很感謝幫助:) – hash004 2014-10-31 16:55:16