PHP Simple DOM Parser для очистки от нескольких URL - PullRequest
2 голосов
/ 16 июня 2011

Можно ли использовать цикл foreach для очистки нескольких URL-адресов из массива? Я пытался, но по какой-то причине он будет тянуть только с первого URL в массиве и покажет результаты.

include_once('../../simple_html_dom.php');

$link = array (
'http://www.amazon.com/dp/B0038JDEOO/',
'http://www.amazon.com/dp/B0038JDEM6/',
'http://www.amazon.com/dp/B004CYX17O/'
);


foreach ($link as $links) {

function scraping_IMDB($links) {
// create HTML DOM
$html = file_get_html($links);

$values = array(); 
foreach($html->find('input') as $element) {     
$values[$element->id=='ASIN'] = $element->value; }  


// get title
$ret['ASIN'] =  end($values);

// get rating
$ret['Name'] = $html->find('h1[class="parseasinTitle"]', 0)->innertext;

$ret['Retail'] =$html->find('b[class="priceLarge"]', 0)->innertext;

// clean up memory
//$html->clear();
   // unset($html);

return $ret;
}



// -----------------------------------------------------------------------------
// test it!



$ret = scraping_IMDB($links);



foreach($ret as $k=>$v)

    echo '<strong>'.$k.'</strong>'.$v.'<br />';

}

Вот код, так как часть комментариев не работала. :) Это очень грязно, потому что я только что отредактировал один из примеров, чтобы поиграть с ним, чтобы посмотреть, смогу ли я заставить его делать то, что я хотел.

Ответы [ 2 ]

3 голосов
/ 16 июня 2011
include_once('../../simple_html_dom.php');

function scraping_IMDB($links) {
    // create HTML DOM
    $html = file_get_html($links);

// What is this spaghetti code good for?    
/*
    $values = array(); 
    foreach($html->find('input') as $element) {     
        $values[$element->id=='ASIN'] = $element->value;
    }  

    // get title
    $ret['ASIN'] = end($values);
*/
    foreach($html->find('input') as $element) {
        if($element->id == 'ASIN') {
             $ret['ASIN'] = $element->value;
        }
    }

// Our you could use the following instead of the whole foreach loop above
//
// $ret['ASIN'] = $html->find('input[id="ASIN"]', 0)->value;
//
// if the 0 means, return first found or something similar,
// I just had a look at Amazons source code, and it contains 
// 2 HTML tags with id='ASIN'. If they were following html-regulations
// then there should only be ONE element with a specific id.

    // get rating
    $ret['Name'] = $html->find('h1[class="parseasinTitle"]', 0)->innertext;

    $ret['Retail'] = $html->find('b[class="priceLarge"]', 0)->innertext;

    // clean up memory
    //$html->clear();
    // unset($html);

    return $ret;
}



// -----------------------------------------------------------------------------
// test it!

$links = array (
    'http://www.amazon.com/dp/B0038JDEOO/',
    'http://www.amazon.com/dp/B0038JDEM6/',
    'http://www.amazon.com/dp/B004CYX17O/'
);

foreach ($links as $link) {
    $ret = scraping_IMDB($link);
    foreach($ret as $k=>$v) {
        echo '<strong>'.$k.'</strong>'.$v.'<br />';
    }
}   

Это должно сработать

Я переименовал массив в 'links' вместо 'link'.Это массив ссылок, содержащий ссылки, поэтому foreach($link as $links) показался неправильным, и я изменил его на foreach($links as $link)

0 голосов
/ 05 февраля 2013

Мне действительно нужно задать этот вопрос, так как он ответит на гораздо больше вопросов после того, как мир прочитает эту ветку. Что если ... вы использовали такие статьи, как простой сайт html dom.

$ret['Name'] = $html->find('h1[class="parseasinTitle"]', 0)->innertext;

$ret['Retail'] = $html->find('b[class="priceLarge"]', 0)->innertext;

return $ret;

}


$links = array (
'http://www.amazon.com/dp/B0038JDEOO/',
'http://www.amazon.com/dp/B0038JDEM6/',
'http://www.amazon.com/dp/B004CYX17O/'
);

foreach ($links as $link) {
$ret = scraping_IMDB($link);
foreach($ret as $k=>$v) {
    echo '<strong>'.$k.'</strong>'.$v.'<br />';
}
} 

что если его $ статей?

$articles[] = $item;    

}
//print_r($articles); 

$links = array (
'http://link1.com',
'http://link2.com',
'http://link3.com'
);

как бы выглядела эта область?

foreach ($links as $link) {
$ret = scraping_IMDB($link);
foreach($ret as $k=>$v) {
    echo '<strong>'.$k.'</strong>'.$v.'<br />';
}
} 

Я видел это множество ссылок по всему стеку за последние 2 года, и до сих пор не могу понять это. Было бы здорово узнать, как простые примеры html dom.

ТНХ.

В первый раз я не уверен, что нарушил кучу правил и неправильно выполнил раздел кода. Мне просто пришлось плохо задать этот вопрос.

...