2011-04-08 44 views
0

我回到另一個屏幕抓取問題。我使用simple_html_dom.php進行屏幕抓取。我粘貼了代碼,響應文本和第二個響應文本。這些迴應是simple_html_dom提供給我的結果。它會向你展示那個迴應是好的,但不是。實際上會有一個鏈接..我的要求是,你可以手動看到什麼結果(在我們的瀏覽器)以及simple_html_dom給了我什麼。php simple_html_dom沒有以適當的順序獲取內容

因此,讓我們先看看代碼。

這裏SE是SEARCH_ENGINE,$ key爲關鍵字(比如數字標牌)

function search_company_name($com_id, $string, $c , $fetched)//----Function: search company name in resultant string 
{ 
    foreach($com_id AS $company => $id) 
    { 
     if(preg_match('/www\.'.$company.'/', $string)>0) 
     {   
      return array('id' => $id,'rank' => $c+1,'fetched' => $fetched+1); 
      break;    
     }   
    }  
    return NULL; 
} 


if($se === 'google.com' || $se === 'google.co.in' || $se === 'google.de' || $se === 'google.nl'|| $se === 'google.co.uk') 
{  
    $count = 0;  //---- Count the rank ----// 
    //----LOOP FOR 2 PAGES OF 100 RESULTS----// 
    for($num_of_results = 0; $num_of_results < 200; $num_of_results += 100) 
    { 
     var_dump('http://www.'.$se.'/search?q='.$key.'&start='.$num_of_results.'&num=100');// **check the link urself in ur browser** 
     $html = file_get_html('http://www.'.$se.'/search?q='.$key.'&start='.$num_of_results.'&num=10'); 

     foreach($html->find('div[id=ires] ol li') as $row) 
     {    
      $string = $row->plaintext; 
      $temp = search_company_name($company_rank, $string, $count, $counter);    
      if(!is_null($temp)) 
      { 
       reset($temp); 
       array_push($finalData, $temp); 
       foreach($company_rank as $company => $id) 
       { 
        if($temp[id] == $id) 
        { 
         unset($company_rank[$company]);break; 
        } 
       } 
       $counter++; 
      } 
      unset($temp); 
      if ($tot_company == $counter) 
      { 
       break; 
      } 
      $count++; 
     } 
     if($tot_company == $counter) 
     { 
      break; 
     } 
     $html->clear(); 
     sleep(3); 
    } 
} 

代碼是菲英島和作品to.now粘貼兩種反應。

<pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'http://www.google.co.in/search?q=Digital+Signage&amp;start=0&amp;num=10'</font> <i>(length=63)</i> 
</pre><pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'Digital signage - Wikipedia, the free encyclopediaDigital signage is a form of electronic display that shows information, advertising and other messages. Digital signs (such as LCD, LED, plasma displays , ...Market and applications - Companies - Content - Technologyen.wikipedia.org/wiki/Digital_signage - Cached - Similar'</font> <i>(length=322)</i> 
</pre><pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'Digital Signage | KiosksDynamic, enterprise digital signage software and hardware solutions for simple and complex digital out-of-home (DOOH) installations scaled to any sized ...www.digitalsignage.com/ - Cached - Similar'</font> <i>(length=222)</i> 

因爲你可以看到有兩個李迴應(檢查自己)。這些結果是第一李和第五李的文本。所以2-4裏已經消失了??它在谷歌中的'數字標牌軟件'正常工作。 Plz幫助我。我的項目即將結束,我陷入了愚蠢的困境。

第二個響應可能不會導致我發佈問題。

+1

可能是搜索引擎正在返回兩組不同的搜索結果,這些搜索結果是您從計算機進行的搜索以及在服務器上進行的搜索。請記住,搜索結果是特定位置的......從印度搜索可能會返回不同於由美國製作的搜索結果。 – 2011-04-08 07:55:01

+0

當我搜索這些結果時,它實際上是1和2,而不是1和5.看來排名已被改變 – SimonDowdles 2011-04-08 08:04:12

+0

@Salman - 這是一個非常有效的觀點。 @Aakash是你從你搜索谷歌的同一臺機器上運行代碼的嗎? – SimonDowdles 2011-04-08 08:07:27

回答

0

Google會根據您的用戶代理返回不同結構的結果。找出你的用戶代理here,然後設置你的腳本使用相同的。

您的IP地址可以確定顯示哪個Google頁面,哪些頁面可能有不同的佈局。