2012-05-07 22 views
0

私はこれまでのところ、私はこのpostから学んだ次のスクリプト、している、のpythonでGoogleの検索結果を取得したい:それは私の4380件の結果をきさげグーグル - 検索可能な結果の数が一致しない総

import urllib2 
from bs4 import BeautifulSoup 
import lxml 
import sqlite3 
import urllib 
import json 

def showSome(searchFor): 
    query = urllib.urlencode({'q':searchFor}) 
    url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s'%query 
    searchResponse = urllib.urlopen(url) 
    searchResults = searchResponse.read() 
    results = json.loads(searchResults) 
    data = results['responseData'] 
    print 'Total results: %s'%data['cursor']['estimatedResultCount'] 
    hits = data['results'] 
    print 'Top %d hits'%len(hits) 
    for h in hits: 
     print ' ', h['url'] 

showSome("site:www.hitmeister.de/shops/") 

を示し私はブラウザを使って同じクエリを検索すると、約6650の結果が得られます。どのようにしてGoogleからすべての結果を抽出できますか? また、これが私にトップ4の結果をもたらします。どのようにすべての結果を取得できますか?

答えて

2

ここで問題となるのは、Googleの推定結果は常に推定値であることです。これらの見積もりは、APIを使用して検索するのかWebブラウザーから検索するのかなど、さまざまな要因によって異なります。実際、同じシステム上の異なるブラウザから同じクエリを実行すると、Googleが異なる見積もりを返すことは不明ではありません。これはおそらくあなたのクエリに答える別のサーバによって説明されるかもしれませんが、私はそれを疑っており、Googleは確かに検索コンテキストを考慮に入れています。

this short pieceおよびGoogle documentation on the subjectも参照してください。その付録はGoogle検索アプライアンス専用に書かれているようですが、これらの結果の正確性についてはよく説明されています。

実用的な注意点として、Googleはとにかくクエリに1,000ヒット以上のヒットを返すことはないため、最初の見積もりにかかわらず、クエリのすべての結果を得ることはありません。少なくとも、私はAPIから1000以上の結果を要求しようとしませんでしたが、これはWebインターフェイスの動作であり、APIにも同じ制限があると仮定します。

+0

1000件のリクエストか1000件の結果を意味しますか? –

1

Googleは非常に複雑で、結果はさまざまなパラメータに依存しません。

たとえば、google.co.ukの語句を検索すると、google.comと異なる結果になります。

この動作は、ユーザーエージェントとCookieによって異なる場合があります(Cookieに異なる言語が設定されているなど)。

結果のカウントが正確でないことも非常に重要です。これは単なるGoogleの検索の推定です。この振る舞いを変更したいのであれば、私はajaxを介して同じパラメータを注入しようとするでしょう、あなたは通常の検索(クッキーなどを含む)を注入します。

最終的に私の反論は次のようになります。なぜこれが必要ですか?カウンターは単なる見積もりであるため、このカウントはほとんどの場合正確ではありません。上位の結果が同じであれば、はるかに重要です。これが当てはまらない場合、それは私が思うような問題になります。

+0

私は結果内のすべてのリンクを取得したいのですが、どのようにこれを行うことができますか、またはすべての結果リンクを取得することは可能ですか? – user873286

+1

あなたはこの方法ですべての結果を得ることはできません、あなたはすぐに最高の結果を得るでしょう。すべてを取得したい場合は、ページを繰り返し処理する必要があります(Google apiで確認してください)。 –

関連する問題