Парсинг Google - количество извлекаемых результатов, не соответствующих общему количеству

Я хочу получать результаты поиска Google с помощью python, пока у меня есть следующий сценарий, который я узнал из этого сообщение:

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 лучших результата, как я могу получить все результаты?


person user873286    schedule 07.05.2012    source источник


Ответы (2)


Проблема здесь в том, что предполагаемое количество результатов Google всегда является приблизительным, не более того. Эти оценки могут варьироваться в зависимости от ряда факторов, в том числе от того, выполняете ли вы поиск через API или из веб-браузера. Фактически, для Google нередко возвращать разные оценки, когда вы запускаете один и тот же запрос из разных браузеров в одной и той же системе. Возможно, это можно объяснить тем, что на ваш запрос отвечает другой сервер, но я сомневаюсь в этом, а Google, безусловно, принимает во внимание контекст поиска.

См. Также эту короткую статью и документацию Google по этому вопросу. Хотя это приложение, похоже, было написано специально для Google Search Appliance, оно хорошо описывает точность этих подсчетов результатов.

С практической точки зрения, Google в любом случае никогда не вернет более 1000 обращений по запросу, поэтому вы никогда не получите всех результатов по запросу, независимо от первоначальной оценки. По крайней мере, я не пробовал запрашивать более 1000 результатов из API, но это поведение веб-интерфейса, и я предполагаю, что API имеет такое же ограничение.

person Daan    schedule 07.05.2012
comment
Вы имеете в виду 1000 запросов или 1000 результатов? - person Capi Etheriel; 24.01.2013

Google очень сложен, и результаты не зависят от множества различных параметров.

Например, если я ищу термин на google.co.uk, я получаю другие результаты, чем google.com.

Это поведение также может быть одинаковым для разных пользовательских агентов и файлов cookie (например, потому что вы установили другой язык в своем файле cookie).

Также очень важно, чтобы подсчет результатов был неточным. Это всего лишь оценка результатов поиска в Google. Если вы хотите изменить это поведение, я бы попытался ввести те же параметры через ajax, которые вы вводите с помощью обычного поиска (включая файлы cookie и т. Д.).

В конце концов, мой встречный вопрос был бы таков: зачем вам это нужно? Этот подсчет в большинстве случаев неточен, потому что счетчик - это всего лишь оценка. Гораздо важнее вопрос, одинаковы ли лучшие результаты. Если это не так, я думаю, это будет проблемой.

person Dave Halter    schedule 07.05.2012
comment
Я просто хочу получить все ссылки в результатах, как я могу это сделать или возможно ли получить все ссылки результатов ??? - person user873286; 07.05.2012
comment
Вы не получите всех результатов с помощью этого метода, вы получите только лучшие результаты. Если вы хотите получить все, вам нужно перебирать страницы (проверьте API Google для этого). - person Dave Halter; 07.05.2012