Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP简单的DOM解析器,可从多个URL中进行刮取_Php_Html Parsing_Web Scraping - Fatal编程技术网

PHP简单的DOM解析器,可从多个URL中进行刮取

PHP简单的DOM解析器,可从多个URL中进行刮取,php,html-parsing,web-scraping,Php,Html Parsing,Web Scraping,是否可以使用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循环从一个数组中刮取多个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 />';

}
include_once('../simple_html_dom.php');
$link=数组(
'http://www.amazon.com/dp/B0038JDEOO/',
'http://www.amazon.com/dp/B0038JDEM6/',
'http://www.amazon.com/dp/B004CYX17O/'
);
foreach($linkas$links){
函数刮取\u IMDB($links){
//创建HTML DOM
$html=file\u get\u html($links);
$values=array();
foreach($html->find('input')作为$element){
$values[$element->id='ASIN']=$element->value;}
//获得头衔
$ret['ASIN']=结束($value);
//获得评级
$ret['Name']=$html->find('h1[class=“parseasinTitle”]”,0)->innertext;
$ret['Retail']=$html->find('b[class=“priceLarge”]',0)->innertext;
//清理内存
//$html->clear();
//未结算($html);
返回$ret;
}
// -----------------------------------------------------------------------------
//试试看!
$ret=刮取IMDB($links);
foreach($k=>v)
回音“”.$k.”.$v.
; }
以下是注释部分不起作用的代码。:)它非常脏,因为我刚刚编辑了一个示例来玩它,看看是否可以让它做我想做的事情。

include_once('..//simple_html_dom.php');
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 />';
    }
}   
函数刮取\u IMDB($links){ //创建HTML DOM $html=file\u get\u html($links); //这个意大利面代码有什么用? /* $values=array(); foreach($html->find('input')作为$element){ $values[$element->id='ASIN']=$element->value; } //获得头衔 $ret['ASIN']=结束($value); */ foreach($html->find('input')作为$element){ 如果($element->id='ASIN'){ $ret['ASIN']=$element->value; } } //我们的方法是,您可以使用以下内容,而不是上面的整个foreach循环 // //$ret['ASIN']=$html->find('input[id=“ASIN”]”,0)->值; // //如果0表示返回first found或类似内容, //我刚刚看了Amazons的源代码,它包含 //2个id='ASIN'的HTML标记。如果它们遵循HTML规则 //那么应该只有一个元素具有特定的id。 //获得评级 $ret['Name']=$html->find('h1[class=“parseasinTitle”]”,0)->innertext; $ret['Retail']=$html->find('b[class=“priceLarge”]',0)->innertext; //清理内存 //$html->clear(); //未结算($html); 返回$ret; } // ----------------------------------------------------------------------------- //试试看! $links=数组( 'http://www.amazon.com/dp/B0038JDEOO/', 'http://www.amazon.com/dp/B0038JDEM6/', 'http://www.amazon.com/dp/B004CYX17O/' ); foreach($links作为$link){ $ret=刮取IMDB($link); foreach($k=>v){ 回音“”.$k.”.$v.
; } }
这应该能奏效


我已将数组重命名为“links”,而不是“link”。这是一个包含链接的链接数组,因此,
foreach($links为链接)
似乎是错误的,我把它改为
foreach($links为链接)

我真的需要问这个问题,因为在全世界阅读这个帖子之后,它会回答更多的问题。如果…怎么办。。。您使用了类似于简单HTMLDOM站点的文章

$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 />';
}
} 
这个区域看起来像什么

foreach ($links as $link) {
$ret = scraping_IMDB($link);
foreach($ret as $k=>$v) {
    echo '<strong>'.$k.'</strong>'.$v.'<br />';
}
} 
foreach($links作为$link){
$ret=刮取IMDB($link);
foreach($k=>v){
回音“”.$k.”.$v.
; } }
在过去的两年里,我在stackoverflow的各个地方都看到了这种多重链接,但我仍然无法理解。如果能够掌握简单的HTMLDOM示例的基本情况,那就太好了

thx


第一次发帖时,我肯定我违反了很多规则,代码部分做得不对。我只是问了个很糟糕的问题

你试过什么?如果你向我们展示你的代码,帮助你会容易得多。PHP就像zombo.com。。。一切都是可能的。这就是我现在正在处理的,但我一直在努力让它重复循环。这在这里不起作用。我在上面添加了代码。您的代码有问题,或者您复制粘贴了错误的内容。。您在foreach循环中定义了一个函数?下一个循环将给出一个错误,因为具有该名称的函数已定义为allready。
foreach ($links as $link) {
$ret = scraping_IMDB($link);
foreach($ret as $k=>$v) {
    echo '<strong>'.$k.'</strong>'.$v.'<br />';
}
}