スクレイピングをしてスプレットシートに挿入
Q&A
Closed
解決したいこと
スクレイピングをしてスプレットシートに挿入するプログラムを書き成功したが、スプレットシートにアクセス上限があるようで途中でエラーが出てしまう。
import urllib.request
import urllib.error
from bs4 import BeautifulSoup
from time import sleep
import requests
import json
import gspread
from oauth2client.service_account import ServiceAccountCredentials
~別のプログラム~
if __name__ == '__main__':
N = 50 # ページネートの数
BT = 1
add_num = 0
for i in range(1, N+1): # 元for i in range(N)
sleep(BT) # アクセスが多くなりすぎないように時間を開ける
# pの値をfor文で変える
url = 'https://www.themoviedb.org/movie?page=' + str(i) + '&language=ja'
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, 'html.parser')
div = soup.findAll('div', class_='options')
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'<○○○○○.json>', scope)
gc = gspread.authorize(credentials)
wks = gc.open('スクレイピング_映画').sheet1
for index, movie_id in enumerate(div):
num = index + 1 + add_num
data = movie_id.get('data-id')
res = api.get_movie(data)
wks.update_acell('A' + str(num), data)
wks.update_acell('B' + str(num), res["title"])
add_num = int(num)
発生している問題・エラー
Traceback (most recent call last):
File "/Users/nawakatsushou/Documents/コード/my_app_Movieist/container/django_app/movieist/make_data.py", line 147, in <module>
wks.update_acell('B' + str(num), res["title"])
File "/Users/nawakatsushou/.local/share/virtualenvs/my_app_Movieist-AKC486yy/lib/python3.9/site-packages/gspread/models.py", line 850, in update_acell
return self.update_cell(*(a1_to_rowcol(label)), value=value)
File "/Users/nawakatsushou/.local/share/virtualenvs/my_app_Movieist-AKC486yy/lib/python3.9/site-packages/gspread/models.py", line 865, in update_cell
data = self.spreadsheet.values_update(
File "/Users/nawakatsushou/.local/share/virtualenvs/my_app_Movieist-AKC486yy/lib/python3.9/site-packages/gspread/models.py", line 235, in values_update
r = self.client.request('put', url, params=params, json=body)
File "/Users/nawakatsushou/.local/share/virtualenvs/my_app_Movieist-AKC486yy/lib/python3.9/site-packages/gspread/client.py", line 73, in request
raise APIError(response)
gspread.exceptions.APIError: {'code': 429, 'message': "Quota exceeded for quota metric 'Write requests' and limit 'Write requests per minute per user' of service 'sheets.googleapis.com' for consumer 'project_number:1094871719692'.", 'status': 'RESOURCE_EXHAUSTED', 'details': [{'@type': 'type.googleapis.com/google.rpc.ErrorInfo', 'reason': 'RATE_LIMIT_EXCEEDED', 'domain': 'googleapis.com', 'metadata': {'quota_metric': 'sheets.googleapis.com/write_requests', 'consumer': 'projects/1094871719692', 'quota_limit': 'WriteRequestsPerMinutePerUser', 'service': 'sheets.googleapis.com'}}]}
sleepの時間を調整してみましたがエラーは消えませんでした。
最後に
解決策が見えてこないので、ご助力いただけたらと思います。
至らない点が多々あるかと思いますが、よろしくお願いします。
0