2012-12-19 51 views
1

我正在写一个我正在写的网络爬虫的最后一个地方。网络爬虫出现Implode错误

网络爬虫爬行英国广播公司新闻,然后插入链接到数据库连同标题和描述等所有的工作,但我有一个数组与所有的启动网址,以便只有任何开始的链接只是插入。

我正在使用foreach循环所有链接数组的所有数组变量,并检查它们是否符合条件,插入到新数组中,然后将其插入到一个字符串中,然后插入到mysql数据库中。

但是,关于我的内爆功能出现错误。我被卡住了。

$bbc_values = array('http://www.bbc.co.uk/news/health-', 'http://www.bbc.co.uk/news/politics-', 'http://www.bbc.co.uk/news/uk-', 'http://www.bbc.co.uk/news/technology-', 'http://www.bbc.co.uk/news/world-', 'http://www.bbc.co.uk/news/england-', 'http://www.bbc.co.uk/news/northern_ireland-', 'http://www.bbc.co.uk/news/scotland-', 'http://www.bbc.co.uk/news/wales-', 'http://www.bbc.co.uk/news/business-', 'http://www.bbc.co.uk/news/education-', 'http://www.bbc.co.uk/news/science_and_enviroment-', 'http://www.bbc.co.uk/news/entertainment_and_arts-', 'http://edition.cnn.com/'); 


    foreach ($links as $link) { 
    $output = array(
"title"  => Titles($link), //dont know what Titles is, variable or string? 
"description" => getMetas($link), 
"keywords" => getKeywords($link), 
"link"  => $link     
); 
if (empty($output["description"])) { 
$output["description"] = getWord($link); 
} 

    foreach ($output as $new_array) { 
if (in_array($new_array['link'], $bbc_values)) { 
    $news_stories[] = $new_array; 
} 
    } 



$data = '"' . implode('" , "', $news_stories) . '"'; 
$result = mysql_query("INSERT INTO news_story (`title`, `description`, `keywords`, `link`) VALUES (" . $data . ")"); 

回答

0

首先,$links没有定义。你的意思是$bbc_value

否则,您必须关闭第一的foreach(关闭}缺失)

0

里面你foreach循环中,您有

$news_stories[] = $new_array; 

,这将产生一个数组的数组可能像下面

array(
    array(
     'title'=>'title1', 
     'description'=>'description1', 
     'keywords'=>'keywords1', 
     'link'=>'link1' 
    ), 
    array(
     'title'=>'title2', 
     'description'=>'description2', 
     'keywords'=>'keywords2', 
     'link'=>'link2' 
    ) 
); 

和你正在使用implode以外的环这样

$data = '"' . implode('" , "', $news_stories) . '"'; 

除非您在数组中指定一个索引,否则不应该工作。所以,如果你使用下面的代码

$data='"' . implode('" , "', $news_stories[0]) . '"'; 
echo $data; 

然后它会从$news_stories阵列破灭第一阵列项,它会产生以下

"title1" , "description1" , "keywords1" , "link1" 

如果要产生以下

$result = mysql_query("INSERT INTO news_story (`title`, `description`, `keywords`, `link`) VALUES ('title1' , 'description1' , 'keywords1' , 'link1')"); 

那么你可以使用

$data="'" . implode("' , '", $news_stories[0]) . "'"; 

所以,如果你写

$result = mysql_query("INSERT INTO news_story (`title`, `description`, `keywords`, `link`) VALUES (" . $data . ")"); 

然后它就会出来产生

$result = mysql_query("INSERT INTO news_story (`title`, `description`, `keywords`, `link`) VALUES ('title1' , 'description1' , 'keywords1' , 'link1')");