如何使用Python请求模块访问Google Sheet的数据

时间:2018-09-17 10:42:20

标签: python python-requests

我想访问Google文档或电子表格中的内容。我使用的是我在Google文档中单击“获取可共享的链接”时生成的链接。

我只有在使用时才能抓取登录页面的数据:

import requests 
r = requests.get("https://docs.google.com/spreadsheets/e/abcdef12345_sample/edit?usp=sharing", auth=('user', 'pass'));
print(r.content)

但是我想抓取电子表格/文档中的内容。 注意:我的帐户已启用MFA。

我该如何实现?除了基本身份验证外,我还应该使用其他身份验证吗?

3 个答案:

答案 0 :(得分:0)

您可以使用Google Sheets API。

步骤为here

  1. 打开Goog​​le Sheets API
  2. 安装Google客户端库
  3. 创建一个名为quickstart.py的文件。确保您更改了SPREADSHEET_ID。要查找您的电子表格ID,请检查其URL。在/ d /之后。

    https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=sheetId

    from __future__ import print_function
    from googleapiclient.discovery import build
    from httplib2 import Http
    from oauth2client import file, client, tools
    
    # If modifying these scopes, delete the file token.json.
    SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
    
    # The ID and range of a sample spreadsheet.
    SPREADSHEET_ID = 'spreadsheetId'
    RANGE_NAME = 'Class Data!A2:E'
    
    
    def main():
    """Show basic usage of Sheets API. 
       Print items in sheets. 
    """
        store = file.Storage('token.json')
        creds = store.get()
        if not creds or creds.invalid:
            flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
            creds = tools.run_flow(flow, store)
        service = build('sheets', 'v4', http=creds.authorize(Http()))
    
        # Call the Sheets API
        SPREADSHEET_ID = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
        RANGE_NAME = 'Class Data!A2:E'
        result = service.spreadsheets().values().get(
            spreadsheetId=SPREADSHEET_ID,
            range=RANGE_NAME).execute()
    
        values = result.get('values', [])
        if not values:
            print('No data found.')
        else:
            print('Name, Major:')
        for row in values:
            # Print columns A and E, which correspond to indices 0 and 4.
            print('%s, %s' % (row[0], row[4]))
    
    if __name__ == '__main__':
        main()
    
  4. 运行quickstart.py

  5. 享受API!

答案 1 :(得分:0)

假设您已经按照OAuth 2身份验证过程获得了访问令牌,则可以使用我编写的以下函数将数据从Google表格中提取到熊猫数据框中。

此方法利用python请求模块,避免使用Google推荐的软件包。

import pandas as pd
import numpy as np
import requests

def get_google_sheet_df(headers: dict, google_sheet_id: str, sheet_name: str, _range: str):
    """_range is in A1 notation (i.e. A:I gives all rows for columns A to I)"""

    url = f'https://sheets.googleapis.com/v4/spreadsheets/{google_sheet_id}/values/{sheet_name}!{_range}'
    r = requests.get(url, headers=headers)
    values = r.json()['values']
    df = pd.DataFrame(values[1:])
    df.columns = values[0]
    df = df.apply(lambda x: x.str.strip()).replace('', np.nan)
    return df

headers = {'authorization': f'Bearer {access_token}',
           'Content-Type': 'application/vnd.api+json'}

google_sheet_id = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
sheet_name = 'Class Data'
sample_range = 'A:F'

df = get_google_sheet_df(headers, google_sheet_id, sheet_name, _range)

您可以在此示例中提供的google_sheet_id上对其进行测试,只需访问令牌即可。

google sheets pull example

答案 2 :(得分:-1)

有一个名为gspread的python库,使用pip install gspread 安装 您还需要使用Google's developer console从Google获得 OAuth2 凭据。您需要的所有信息都在 gspread 文档中。