2016-09-08 145 views
-1

我有一个简单的卷曲脚本,搜索谷歌的“蝙蝠侠”,然后将结果保存在一个文件...PHP - 迭代谷歌搜索结果

有人能告诉我通过文件迭代的好方法请找到每个搜索结果标题和URL?

这是我的代码:

function get_remote_file_to_cache() 
{ 
    $the_site = "https://www.google.se/webhp?sourceid=chrome-instant&rlz=1C5CHFA_enSE555SE556&ion=1&espv=2&ie=UTF-8#newwindow=1&q=batman"; 


    $curl = curl_init(); 
    $fp = fopen ("temp_file.txt", "w"); 
    curl_setopt ($curl, CURLOPT_URL, $the_site); 
    curl_setopt ($curl, CURLOPT_FILE, $fp); 

    curl_setopt ($curl, CURLOPT_RETURNTRANSFER, TRUE); 

    curl_exec ($curl); 

    $httpCode = curl_getinfo ($curl, CURLINFO_HTTP_CODE); 
    if ($httpCode == 404) 
    { 
     touch ('cache/404_err.txt'); 
    } /* 
    * else { touch('cache/'.rand(0, 99999).'--all_good.txt'); } 
    */ 
    else 
    { 
     $contents = curl_exec ($curl); 
     fwrite ($fp, $contents); 
    } 

    curl_close ($curl); 
    fclose ($fp); 
} 

echo rand(1, 425).get_remote_file_to_cache(); 
+0

对此的任何答案只会暂时工作,至多。谷歌积极努力阻止这类事情发生,他们将修改HTML,移动东西,混淆结果,如果您提出太多请求,请禁止您的IP或粘贴验证码 –

+0

这不适用于要查询的活动项目每天数百次,我想从中学习,对我自己更有教育意义;) – Ryan

+0

好吧,禁止/验证码问题不会影响你,但是在解压缩结果中的任何成功仍然只是暂时的,直到格式为结果页面发生变化(可能是您下次加载它时)。你需要通过下载的HTML文件查看你想要的位(标题和URL),看看你是否可以编写一些正则表达式来提取这些。请记住,这是谷歌的皇冠上的宝石 - 不要低估他们付出了多少努力,确保这种事情不能可靠地自动化。祝你好运:) –

回答

1

您可以搜索使用DOMDocumentDOMXPath

// Temp: 
$sPageHTML = '<html><head></head><body><div class="test">Text here</div></body></html>'; 

$oDomDocument = new DOMDocument (); 
$oDomDocument->loadHTML ($sPageHTML); 

// Now, search the DOM structure for all divs with class "test". 
$oXPath = new DOMXPath ($oDomDocument); 
$results = $oXPath->query ('//div[@class="test"]'); 

// Loop through the results. 
foreach ($results as $result) 
{ 
    echo 'Innertext: ' . $result->nodeValue; 
} 

好运

+0

谢谢,将检查出来! – Ryan

+0

有帮助吗?... – Scriptman