0

PythonでGoogle検索結果を取得したいのですが、これまでのところ、この投稿から学んだ次のスクリプトがあります。

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/")

4380 件の結果が表示されます。ブラウザを使用して同じクエリを検索すると、約 6650 件の結果が得られます。Google からすべての結果を抽出するにはどうすればよいですか? また、これにより上位 4 つの結果が得られます。すべての結果を取得するにはどうすればよいですか?

4

2 に答える 2

2

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

この短い記事件名に関する Google ドキュメントも参照してください。この付録は Google 検索アプライアンス専用に書かれているようですが、これらの結果数の正確さをよく表しています。

実際問題として、Google がクエリに対して 1,000 を超えるヒットを返すことは決してないため、最初の見積もりに関係なく、クエリのすべての結果を取得することはできません。少なくとも、API から 1000 件を超える結果をリクエストしようとしたことはありませんが、これは Web インターフェイスの動作であり、API にも同じ制限があると思います。

于 2012-05-07T14:18:40.390 に答える
1

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

たとえば、 で用語を検索するとgoogle.co.uk、 とは異なる結果が得られますgoogle.com

この動作は、ユーザー エージェントや Cookie が異なっていても同じである可能性があります (たとえば、Cookie に別の言語を設定したため)。

また、結果のカウントが正確でないことも非常に重要です。あくまでグーグル検索の目安です。この動作を変更したい場合は、通常の検索 (Cookie などを含む) で注入するのと同じパラメーターを ajax を介して注入しようとします。

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

于 2012-05-07T14:18:44.803 に答える