1

我正在编写我正在编写的网络爬虫的最后一条。

网络爬虫抓取 BBC 新闻,然后将链接以及标题和描述等插入数据库。所有这些都有效,但我有一个包含所有起始 url 的数组,因此只插入以其中任何一个开头的链接。

我正在使用 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 . ")");
4

2 回答 2

0

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

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

于 2012-12-19T18:21:31.423 回答
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')");
于 2012-12-19T18:33:03.810 回答