PHP简单的DOM解析器,可从多个URL中进行刮取
是否可以使用foreach循环从一个数组中刮取多个URL?我一直在尝试,但出于某种原因,它只会从数组中的第一个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/' );
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 />';
}
}