我有一个抓取工具,可以抓取以www.bbc.co.uk/news开头的网站。它抓取所有以http://www.bbc.co.uk/news开头的链接,找到它们的描述,链接和标题,并将它们插入到数据库中。
出于某种原因,它似乎没有插入。
任何想法?
PS完全没有输出,完全空白的网页
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);
}
if (substr($ouput, 0, 26) == "http://www.bbc.co.uk/news/") {
$data = '"' . implode('" , "', $output) . '"';
$success = mysql_query( "INSERT INTO news_story (`title`, `description` , `keywords`, `link`)
VALUES (" . $data . ")") or zerror_reporting();
if ($sucess) {
echo "YEAH!";
}
if (!$sucess) {
echo "NO!!";
}
print_r($data);
}}
答案 0 :(得分:1)
问题在于:
if (substr($ouput, 0, 26) == "http://www.bbc.co.uk/news/") {
$data = '"' . implode('" , "', $output) . '"';
$success = mysql_query( "INSERT INTO news_story (`title`, `description` , `keywords`, `link`)
VALUES (" . $data . ")") or zerror_reporting();
if ($sucess) {
echo "YEAH!";
}
你的$ouput
变量在哪里......我想你想写$output
..但它也没有执行,因为$output
变量是一个数组而不是string
答案 1 :(得分:0)
空白页是PHP致命错误,会产生500 Internal Server Error
响应。这是由未定义的函数zerror_reporting()
引起的:
mysql_query(...) or zerror_reporting();
将其更改为
mysql_query(...) or trigger_error(mysql_error());
trigger_error()调用会将mysql错误添加到错误日志中。
第二个问题是你在数组上尝试substr()
,你应该在link
元素上这样做:
if (substr($output['link'], 0, 26) == "http://www.bbc.co.uk/news/") {
答案 2 :(得分:0)
在插入数据库
之前清理您的值答案 3 :(得分:0)
@Mrinmoy的解决方案是正确的,但代码中似乎存在更多问题,因为您的代码从未进一步涉及此问题。
首先设置显示错误:
ini_set('error_reporting',E_ALL);
ini_set('display_errors','on');
foreach ($links as $link) {
如果你能听,PHP会说很多话。
我个人使用E_ALL | E_STRICT,但这对今天来说太少了。 :)
然后清理您的数据,否则很少会成功插入记录。你的数据会有很多句子:
$output = array(
"title" => mysql_real_escape_string(Titles($link)), //dont know what Titles is, variable or string?
"description" => mysql_real_escape_string(getMetas($link)),
"keywords" => mysql_real_escape_string(getKeywords($link)),
"link" => mysql_real_escape_string($link)
);
if (empty($output["description"])) {
$output["description"] = mysql_real_escape_string(getWord($link));
}
然后更正变量拼写错误并使用输出数组的链接索引:
if (substr($output['link'], 0, 26) == "http://www.bbc.co.uk/news/") {
最后,如果您仍然没有获得数据,那么您自己肯定会了解更多信息。在调用mysql_query之前使用print_r($output); echo $data;
。通过使用echo __LINE__ . "\n";
填充代码以查看其死亡位置来跟踪进度的另一种方法。验证代码中的方法名称为zerror_reporting
,或替换为die(mysql_error());