2011-11-15 38 views
0

我有一個Simple PHP DOM解析器的問題。我基本上必須爲圖像和他們的頭銜刮目錄網站。簡單的PHP DOM解析器不能在開關盒(PHP)中工作

該網站是刮是http://pinesite.com

我想出了下面的代碼來做到這一點(這將通過AJAX調用):

<?php 
include ('simple_html_dom.php'); 
$function = $_GET['function']; 
switch($function) { 
    case 'subcat': 
    $maincat = $_GET['cat']; 
    $url = "http://www.pinesite.com/meubelen/index.php?".$maincat."&lang=de"; 
    $html = file_get_html($url); 
    $data = $html->find('.box_166_content .act_path li a'); 
    $output =""; 
    foreach ($data as $subcat) { 
     $title = $subcat->plaintext; 
     $href = $subcat->href; 
     $link['title'] = $title; 
     $link['href'] =substr($href,10); 
     $output[] = $link; 
    } 
    echo json_encode($output); 
    $html->clear(); 
    unset($html); 
    unset($url); 
    break; 

    case 'images': 
    $subcat = $_GET['subcat']; 
    $url = "http://www.pinesite.com/meubelen/index.php?".$subcat; 
    $html = file_get_html($url); 
    $iframe = $html->find('#the_iframe',0); 
    $url2 = $iframe->src; 
    $html->clear(); 
    unset($html); 

    $html2 = file_get_html("http://www.pinesite.com/meubelen/".$url2); 
    $titles = $html2->find('p'); 
    $images = $html2->find('img'); 
    $output=''; 
    $i=0; 
    foreach ($images as $image) { 
     $item['title'] = $titles[$i]->plaintext; 
     $item['thumb'] = $image->src; 
     $item['image'] = str_replace('thumb_','',$image->src); 
     $output[] = $item; 
     $i++; 
    } 
    echo json_encode($output); 
    break; 
} 
?> 

所以這是「功能」文件,不工作的部分是最後一種情況。

我不知道錯在這裏,所以我在一個單獨的文件中進行了測試(最後一種情況下)(我把它從iFrame中獲取URL(即部分不工作):

<?php 
include_once "simple_html_dom.php"; 

$fullurl = "http://www.pinesite.com/meubelen/prog/browse.php?taal=nl&groep=18&subgroep=26"; 

$html = file_get_html($fullurl); 
$titles = $html->find('p'); 
$images = $html->find('img'); 
$output=''; 
$i=0; 
foreach ($images as $image) { 
    $item['title'] = $titles[$i]->plaintext; 
    $item['thumb'] = $image->src; 
    $item['image'] = str_replace('thumb_','',$image->src); 
    $output[] =$item; 
    $i++; 
} 
echo json_encode($output); 
?> 

就像我說的第一部分應該返回相同的第二個(如果你添加?功能=圖像& subcat = dichte-kast)但它沒有。我猜是因爲我多次使用解析器。

有沒有人對我有什麼建議?

+0

沒有你真的檢查過,如果URL檢索工作。 '$ url2'實際上是否有一個有效的url? '$ html2'是否有一些頁面內容?您的腳本完全取決於服務器的網絡連接是否穩定,遠程站點是否可用,對於任何錯誤都沒有餘量。 –

+0

我知道:),這只是一個刮擦的測試,我會在它上線之前修復所有這些。 –

回答

1

該pro瑕疵在於您的$url2變量包含html實體,並且當您將其連接到根url時,結果不是有效的url。因此,file_get_html()函數將不會檢索您期望的url(以及數據),但會有所不同。

快速解決您的問題的方法是html_entity_decode(),但您也可能需要閱讀調試內容。它可以像將var_dump();應用於您正在使用的每個變量一樣簡單,並查看輸出與您期望的輸出不同的地方。

您也可能想檢查一些安全問題。編寫$subcat = $_GET['sub_cat']絕不會比直接使用$_GET['sub_cat']更安全。

+0

謝謝,我知道這是類似的,是的,我知道整個安全問題。一旦我有一個基本的工作版本,我會解決這些問題。 –

+1

如果你的答案對你有幫助,那麼請諒解我的答案:)。 – vindia

0

林不知道我完全理解這個問題,但從我可以收集的是,你試圖從一個給定的網頁抓取一些圖像及其相關的標題,然後保存它們?如果那是這種情況,那麼這裏是一些思考的食物。 (對不起,它不能更具體)。

使用file_get_contents抓取html內容。

$html = file_get_contents('www.someurl.com'); 

然後preg_match()所有的圖像標籤和其他你可能需要的數據。有大量的信息告訴我們怎樣做到這一點Matching SRC attribute of IMG tag using preg_match

$matches = preg_match('<img>*<\/img>', $html); # this is a guess 

一旦你有圖像標記的集合爲一個數組,然後使用curl保存圖像

http://www.edmondscommerce.co.uk/php/php-save-images-using-curl/ 

我覺得這個問題你有剝離你想要的內容的HTML內容

+0

他已經在使用DOM解析器來執行此操作。此外,他的問題不在於他的解析方法。 – vindia

+0

啊,我誤解了這個問題 –

+0

我承認這個問題不是很清楚地說明;-) – vindia

相關問題