python - Python 中 Google 搜索出错 : 503 Service Unavailable

标签 python python-3.x google-search

当我尝试在 python 控制台中执行操作时:

from google import search
urls = search("site:facebook.com inurl:login", stop=20)
for url in urls:
    print(url)

为了搜索登录页面,我收到错误:

urllib.error.HTTPError: HTTP Error 503: Service Unavailable

但是,如果我尝试在 Google 中手动搜索它,它会起作用,Google 可能会阻止我的查询吗?

最佳答案

Cong Ma一样在他的回答中说,在谷歌上进行许多自动搜索将导致谷歌阻止您,并且您将收到错误503。当前正在运行的唯一来自谷歌的用于执行搜索的API是 Google Custom Search API 。问题在于它的设计目的是搜索您的页面。并且可以选择将其设置为搜索所有页面(请参阅此 answer ),但即使如此,您每天也只能进行 100 次搜索。之前可以选择使用其他 API,例如 Bing 和 Yahoo,但它们都不再免费了。唯一可以进行互联网搜索的免费 API 是 FAROO API 。但仍然有一种选择可以使用selenium webdriver进行谷歌搜索。 。 Selenium 用于模仿浏览器的使用,它有 options使用 Firefox、Chrome、Edge 或 Safari 网络驱动程序(它实际上会打开 Chrome 并进行搜索),但这很烦人,因为您实际上不想看到浏览器。但是有一个解决方案,您可以使用 PhantomJS 。从here下载。提取并在下面的示例中查看如何使用它(我编写了一个简单的类,您可以使用它,您只需更改 PhantomJS 的路径即可):

import time
from urllib.parse import quote_plus
from selenium import webdriver


class Browser:

    def __init__(self, path, initiate=True, implicit_wait_time = 10, explicit_wait_time = 2):
        self.path = path
        self.implicit_wait_time = implicit_wait_time    # http://www.aptuz.com/blog/selenium-implicit-vs-explicit-waits/
        self.explicit_wait_time = explicit_wait_time    # http://www.aptuz.com/blog/selenium-implicit-vs-explicit-waits/
        if initiate:
            self.start()
        return

    def start(self):
        self.driver = webdriver.PhantomJS(path)
        self.driver.implicitly_wait(self.implicit_wait_time)
        return

    def end(self):
        self.driver.quit()
        return

    def go_to_url(self, url, wait_time = None):
        if wait_time is None:
            wait_time = self.explicit_wait_time
        self.driver.get(url)
        print('[*] Fetching results from: {}'.format(url))
        time.sleep(wait_time)
        return

    def get_search_url(self, query, page_num=0, per_page=10, lang='en'):
        query = quote_plus(query)
        url = 'https://www.google.hr/search?q={}&num={}&start={}&nl={}'.format(query, per_page, page_num*per_page, lang)
        return url

    def scrape(self):
        #xpath migth change in future
        links = self.driver.find_elements_by_xpath("//h3[@class='r']/a[@href]") # searches for all links insede h3 tags with class "r"
        results = []
        for link in links:
            d = {'url': link.get_attribute('href'),
                 'title': link.text}
            results.append(d)
        return results

    def search(self, query, page_num=0, per_page=10, lang='en', wait_time = None):
        if wait_time is None:
            wait_time = self.explicit_wait_time
        url = self.get_search_url(query, page_num, per_page, lang)
        self.go_to_url(url, wait_time)
        results = self.scrape()
        return results




path = '<YOUR PATH TO PHANTOMJS>/phantomjs-2.1.1-windows/bin/phantomjs.exe' ## SET YOU PATH TO phantomjs
br = Browser(path)
results = br.search('site:facebook.com inurl:login')
for r in results:
    print(r)

br.end()

关于python - Python 中 Google 搜索出错 : 503 Service Unavailable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43630630/

相关文章:

android - 如何将带有描述和预览的我的应用程序内容添加到 Google 搜索结果中?

java - 使用自定义搜索的 Google 搜索

python - 如何使用变量在 Spyder 控制台中执行 Python 3.3 脚本?

python - 找到字符串 X 的最长子序列,它是字符串 Y 的子字符串

python - Python 中 int 和 float 的范围

python - 正确地将变量传递给函数

android - Google App Index Api 推广App?

python - 读取文本文件时如何修复此 cp950 "illegal multibyte sequence"UnicodeDecodeError?

python - Seaborn 热图自定义颜色图

python - Beautifulsoup4 - 通过强标签值识别信息仅适用于标签的某些值