Python googlesearch API - 更改国家/地区位置并获取广告结果

Python googlesearch API - change country location and get Ads results

我正在尝试使用 Python 中的 googlesearch api 来获取多个查询的前 10 个结果,但我遇到了两个问题:

  1. 使用 'country' 参数更改国家(例如 country='us' 等)似乎对结果没有任何影响。在几个国家/地区进行了尝试。
  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])

答案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"

当你给它一个国家时,简单地传入 usil 是不够的。您希望国家/地区参数采用 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 动态加载广告。另一方面,这个库只做静态解析。它不执行任何 JavaScript。您将需要 运行 Selenium 或 pyppeteer 让浏览器执行 JavaScript 以获取广告。

遗憾的是,国家/地区定位参数只是向 Google 发出的信号,而不是设置更改。 Google 不会实际向您显示结果,因为它们显示给该国家/地区的匿名用户。所以基本没用。

上面提到的 APIs 也不会解决这个问题,因为它们只使用基于美国的 IP 地址。 (@Link 你能确认吗?如果它不仅在美国服务器上,我会为你的 API 付费。)

因此,您实际上需要 运行 来自 IP 地址位于您目标国家/地区的服务器的此代码,同时还设置了国家/地区语言的浏览器设置参数。

您也无法呈现广告,因为它们是在事后单独呈现的。有一个巨大的行业试图做到这一点,任何成功的人都会收取相当高的费用。但最好的起点是该国家/地区的 IP 地址并使用 selenium。请求不会削减它,如果你想要广告,当然不会。

最后,Google 对自动搜索检测非常激进,因为您自动执行的每次搜索都会显示广告,扭曲他们的广告客户数量,实际上会花费广告客户的钱,即使您没有点击它们(由于到称为质量得分的机制)。

如果您的数量很少,那么在该国家/地区具有私有 IP(例如,不是 AWS 或 Azure 数据中心 IP)的基于 selenium 的脚本是您最好的选择。

如果你想出如何大规模地做到这一点,你就会让人们不顾一切地寻求解决方案。