获取标题,URL,描述并将其插入数据库

时间:2013-05-21 10:34:45

标签: domxpath

我是新来的,需要帮助来修复我的代码。

我正在尝试使用DomXPath制作代码,从bing搜索中获取标题,网址和说明,然后将其保存到我的数据库中。

以下是代码:

<?php
$s="something-words";
$keywords = strstr($s, '-') ? str_replace('-', '+', $s) : $s;

$html5 = new DOMDocument();

@$html5->loadHtmlFile('http://www.bing.com/search?q='.$keywords.'&go=&qs=bs&filt=all');
$xpath5 = new DOMXPath($html5);

    $nodes = $xpath5->query('//div[@class="sb_tlst"]/h3');
    $nodes = $xpath5->query('//div[@class="sb_meta"]/cite');
    $nodes = $xpath5->query('//div[@id="results"]/ul[@id="wg0"]/li/div/div/p');

    $data = array();
    $data2 = array();
    $data3 = array();

$i = 0;

foreach ($nodes as $node) {
     $data = $node->textContent;
     $i++;
     // insert table urlgrab
     mysql_query( "INSERT INTO urlgrab(title) Values ('$data')");
     $data2 = $node->textContent;
     $i++;
     // update table urlgrab
     dbConnect();
     mysql_query( "UPDATE urlgrab SET url='$data2' WHERE title='$data'" );
     $data3 = $node->textContent;
     $i++;
     // update table urlgrab
     dbConnect();
    mysql_query( "UPDATE urlgrab SET description='$data3' WHERE title='$data'" );
}
?>

问题是我在数据库中获得了与标题,网址,描述相同的结果。如何修复此代码以将所有数据标题,网址和描述保存到我的数据库?

1 个答案:

答案 0 :(得分:0)

因为你搞砸了你的代码所以很难识别。但是假设我已经生成了下面适合你的代码。

$titles = $xpath5->query('//div[@class="sb_tlst"]/h3');
$urls = $xpath5->query('//div[@class="sb_meta"]/cite');
$descriptions = $xpath5->query('//div[@id="results"]/ul[@id="wg0"]/li/div/div/p');

$arrTitle = array();
foreach($titles as $title){
    $arrTitle[] = $title->textContent;
}

$arrUrl = array();
foreach($urls as $url){
    $arrUrl[] = $url->textContent;
}

$arrDescription = array();
foreach($descriptions as $description){
    $arrDescription[] = $description->textContent;
}


$i = 0;
dbConnect();
foreach ($i=0; $i < count($arrTitle); $i++) {
    $title = $arrTitle[$i];
    $url = $arrUrl[$i];
    $description = $arrDescription[$i];
    mysql_query( "INSERT INTO urlgrab(`title`, `url`, `description`) Values ('$title', '$url', '$description')");
}

* 在循环中删除$i++;然后运行。实际上我们在$i++循环* 中正在进行for这将解决您的问题。