我们如何使用DOM清理Google搜索网址列表

时间:2012-09-17 09:50:16

标签: php url dom

我们正在开展与Google相关的项目之一,其中我们需要一个来自Google.com的搜索网址列表。请看我们的代码。

include('dom/simple_html_dom.php');
$html = "http://www.google.com/search?q=stackoverflow";
$doc = new DOMDocument();
$doc = new DOMDocument;
$doc->loadhtmlfile($html);
$tags = $doc->getElementsByTagName('a');

 foreach ($tags as $tag) {
        echo $tag->getAttribute('href')."<br>";
 }

我们正在获取Google搜索结果页中所有网址的列表。见下文....

/url?q=http://stackoverflow.com/users/login&sa=U&ei=c_FWUPyTEoHIrQfsiYB4&ved=0CB8QqwMoADAA&usg=AFQjCNG2OZyIKUhw3qJpqiEgscmvrCRoYw
/url?q=http://stackoverflow.com/questions/tagged/android&sa=U&ei=c_FWUPyTEoHIrQfsiYB4&ved=0CCUQqwMoAzAA&usg=AFQjCNFqJTvfXN8zUDwS_1jYs4xt5w0NJA
/url?q=http://careers.stackoverflow.com/&sa=U&ei=c_FWUPyTEoHIrQfsiYB4&ved=0CCEQqwMoATAA&usg=AFQjCNEt6onx0tAMTtPB0Qzx0mJhnabQ5w
/url?q=http://blog.stackoverflow.com/&sa=U&ei=c_FWUPyTEoHIrQfsiYB4&ved=0CCcQqwMoBDAA&usg=AFQjCNF674QxjxMjvwaLRXTN5qcjHNPQ9Q

我们只需要前10个搜索结果,而没有添加Google的其他参数,例如此http://stackoverflow.com/users/login已清除的网址

被修改 在本案例中,在随机情况下,有时值会有一些真正的参数http://stackoverflow.com/users/login?checking=ok&tesing=working,但如果我们分解URL,那么我们可以返回正确的参数。 的被修改

请帮我改进这个脚本。

谢谢

PPS

2 个答案:

答案 0 :(得分:0)

可能很简单;

$url = explode('&sa=','/url?q=http://stackoverflow.com/users/login&sa=U&ei=c_FWUPyTEoHIrQfsiYB4&ved=0CB8QqwMoADAA&usg=AFQjCNG2OZyIKUhw3qJpqiEgscmvrCRoYw');

$cleaned = str_replace('/url?q=','',$p[0]);
print($cleaned);

虽然有人可能会采用更清洁的方式。

示例:

$url = explode('&sa=','/url?q=http://stackoverflow.com/users/login?checking=ok&tesing=working&sa=U&ei=c_FWUPyTEoHIrQfsiYB4&ved=0CB8QqwMoADAA&usg=AFQjCNG2OZyIKUhw3qJpqiEgscmvrCRoYw',2);


$cleaned = str_replace('/url?q=','',$url[0]);
print($cleaned);

返回http://stackoverflow.com/users/login?checking=ok&tesing=working

答案 1 :(得分:0)

你可以像parse the url一样迭代它们:

foreach ($tags as $tag) {
    $arrHref=parse_url($tag->getAttribute('href'));
    $yourNewLink=$arrHref['scheme'].$arrHref['host'].$arrHref['path']
    echo $yourNewLink;
}

您可以在需要时使用break退出循环:

$loopLimit=10;
$curCount=0;
foreach ($tags as $tag) 
{
    $arrHref=parse_url($tag->getAttribute('href'));
    $yourNewLink=$arrHref['scheme'].$arrHref['host'].$arrHref['path']
    echo $yourNewLink;
    $curCount++;
    if($curCount>$LoopLimit)
    {
        break;
    }
}