2012-09-14 95 views
0

我已經開始用curl,dom,xpath構建單個Curl會話,並且效果很好。PHP - 多捲曲 - 抓取數據/內容

我現在正在建立一個基於curl的刮板,用於在一個流程中從多個站點獲取數據,並且該腳本回顯我輸入的單個短語..但它沒有拾取變量。

do{ 
    $n=curl_multi_exec($mh, $active); 
}while ($active); 

foreach ($urls as $i => $url){ 
    $res[$i]=curl_multi_getcontent($conn[$i]);  
    echo ('<br />success'); 
} 

因此,這的確呼應了成功文本多次有網址..但實際上這是不是我想要的。我想分手的HTML我就像跟單捲曲會話。 。

我的確在單一卷曲會議內容:

//parse the html into a DOMDocument 
$dom = new DOMDocument(); 
@$dom->loadHTML($res); 

// grab all the on the page 
$xpath = new DOMXPath($dom);   
$product_img = $xpath->query("//div[@id='MAIN']//a"); 

for ($i = 0; i < $product_img->length; $i++){ 
    $href = $product_img->item($i); 
    $url = $href->getAttribute('href'); 
    echo "<br />Link : $url"; 
} 

此分析DOM/XPath是努力爲單個會話捲曲,但不是當我運行multicurl。 Multicurl我可以爲會話的URL做curl_multi_getcontent,但這不是想要的.. 我想獲得與我在單個會話中使用Dom/Xpath獲取的內容相同的內容。 我能做些什麼?

編輯

看來我有getAttribute方法問題。這是一個圖像鏈接,我有麻煩抓住。刮當鏈路被示出,但隨後將引發一個錯誤:

致命錯誤:調用到非對象的成員函數的getAttribute()中

查詢:

// grab all the on the page 
$xpath = new DOMXPath($dom); 
$product_img = $xpath->query("//img[@class='product']"); 
$product_name = $xpath->query("//img[@class='product']"); 

這是工作:

for ($i = 0; i < $product_name->length; $i++) { 
    $prod_name = $product_name->item($i); 
    $name = $prod_name->getAttribute('alt'); 
    echo "<br />Link stored: $name"; 
} 

這不是工作:

for ($i = 0; i < $product_img->length; $i++) { 
    $href = $product_img->item($i); 
    $pic_link = $href->getAttribute('src'); 
    echo "<br />Link stored: $pic_link"; 
} 

任何想法我做錯了什麼? 在此先感謝。

+0

歡迎來到SO!爲了幫助我們更輕鬆地閱讀該問題,請正確格式化代碼。 – weltschmerz

+0

嗨查爾斯。感謝您的幫助! – Niels

回答

0

由於一些奇怪的原因,只有一個src不能正常工作。
這個問題可以認爲是「解決」。

+0

由於一些奇怪的原因,它只是一個'src'不能正常工作。所以這可以被認爲是「解決」。 /尼爾斯 – Niels