【问题标题】:Python googlesearch API - change country location and get Ads resultsPython googlesearch API - 更改国家/地区位置并获取广告结果
【发布时间】:2020-07-14 10:54:30
【问题描述】:

我正在尝试使用 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])

【问题讨论】:

    标签: python python-3.x google-search google-search-api


    【解决方案1】:

    答案 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 以获取广告。

    【讨论】:

    • 这适用于大多数国家/地区,但使用 country = "countryUS" 和返回的变化会导致我的原籍国。美国还有其他代码吗?
    • 代码确实提到结果并不总是相同的。可能只是您从不是来自美国的 IP 地址发出请求。
    【解决方案2】:

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

    上述 API 也无法解决此问题,因为它们仅使用基于美国的 IP 地址。 (@Link 你能确认一下吗?如果它不仅在美国服务器上,我会为你的 API 付费。)

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

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

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

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

    如果你想出如何大规模地做到这一点,你就会让人们为自己找到解决方案而倾倒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2019-01-13
      • 2013-10-02
      • 2023-03-21
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多