Python API googlesearch - изменение страны и получение результатов рекламы - PullRequest
1 голос
/ 14 июля 2020

Я пытаюсь использовать api googlesearch в Python, чтобы получить 10 лучших результатов по нескольким запросам, и у меня возникают две проблемы:

  1. Изменение страны с помощью 'country 'param (например, country =' us 'et c ..), похоже, вообще не влияет на результаты. Пробовал это с несколькими странами.
  2. Я хочу включить результаты рекламы и не могу найти способ сделать это.

Если кто-нибудь знает, как это сделать с помощью googlesearch или любого другого другой бесплатный API, который был бы отличным.

Спасибо!

# coding: utf-8
from googlesearch import search
from urlparse import urlparse
import csv
import datetime

keywords = [
    "best website builder"
]
countries = [
  "us",
  "il"
]

filename = 'google_results.csv'
with open(filename, 'w') as f:
  writer = csv.writer(f, delimiter=',')

  for country in countries:
    for keyword in keywords:
      print "Showing results for: '" + keyword + "'"
      writer.writerow([])
      writer.writerow([keyword])
      for url in search(keyword, lang='en', stop=10, country=country):
        print(urlparse(url).netloc)
        print(url)
        writer.writerow([urlparse(url).netloc, url])

Ответы [ 2 ]

1 голос
/ 17 июля 2020

К сожалению, параметр таргетинга на страну - это просто сигнал для Google, а не изменение настроек. На самом деле Google не будет показывать вам результаты так, как они видны анонимному пользователю в этой стране. Так что это практически бесполезно.

Упомянутые выше API также не исправят этого, поскольку они используют только IP-адреса из США. (@Link вы можете подтвердить? Я бы заплатил за ваш API, если бы он был не только на серверах в США.)

Таким образом, вам действительно нужно будет запустить этот код с сервера с IP-адресом в стране, на которую вы нацеливаетесь, при этом в настройках браузера также заданы параметры языка страны.

Вы также не сможете отображать объявления, поскольку они отображаются немного постфактум отдельно. Существует огромная индустрия, пытающаяся понять это правильно, и любой, кто добился этого, взимает довольно высокие сборы. Но лучше всего начать с IP-адреса в этой стране и использовать селен. Запросы не помогут, и уж тем более, если вам нужна реклама.

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

Если у вас низкий уровень громкости, сценарий на основе селена с частным IP-адресом (например, не AWS или Azure IP-адрес центра обработки данных) в этой стране - ваш лучший выбор.

И если вы поймете, как это сделать в масштабе, у вас будут люди, которые сами будут пытаться найти решение.

1 голос
/ 15 июля 2020

Ответ 1. Формат вашей страны неверен.

Модуль создает URL-адрес для запроса. В следующем формате:

url_search = "https://www.google.%(tld)s/search?hl=%(lang)s&q=%(query)s&btnG=Google+Search&tbs=%(tbs)s&safe=%(safe)s&cr=%(country)s"

Когда вы указываете страну, просто указать us или il недостаточно. Вы хотите, чтобы параметр страны был в формате countryXX, где XX - двухбуквенное сокращение. Например, Франция - FR. Таким образом, страна будет countryFR.

И даже в исходном коде сказано, что этот параметр не всегда надежен.

    :param str country: Country or region to focus the search on. Similar to
        changing the TLD, but does not yield exactly the same results.
        Only Google knows why...

Ответ 2: Объявления загружаются динамически с использованием JavaScript . С другой стороны, эта библиотека выполняет только статический анализ c. Он не выполняет ни одну из JavaScript. Вам нужно будет запустить Selenium или pyppeteer, чтобы браузер выполнил JavaScript для получения рекламы.

Есть несколько бесплатных API, которые вы можете попробовать:

1. RapidAPI Google Search API

2. Неофициальный Google Search API

...