0

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

我正在尝试制作一个代码,DomXPath用于从 bing 搜索中获取标题、url 和描述,然后将其保存到我的数据库中。

这是代码:

<?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'" );
}
?>

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

4

1 回答 1

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循环 *这将解决您的问题。

于 2013-05-21T11:07:53.723 回答