我想访问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。
我该如何实现?除了基本身份验证外,我还应该使用其他身份验证吗?
答案 0 :(得分:0)
您可以使用Google Sheets API。
步骤为here。
创建一个名为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()
运行quickstart.py
答案 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上对其进行测试,只需访问令牌即可。
答案 2 :(得分:-1)
有一个名为gspread的python库,使用pip install gspread
安装
您还需要使用Google's developer console从Google获得 OAuth2 凭据。您需要的所有信息都在 gspread 文档中。