微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在 10 个 API 请求后出现 ConnectionError“Connection aborted”?

如何解决为什么在 10 个 API 请求后出现 ConnectionError“Connection aborted”?

我有一个嵌套的 for 循环,它调用了 Spotify 和抒情天才 API,目的是构建一个包含歌曲信息及其相关歌词的数据框。然而,在拉取前十位艺术家的信息后,对 spipy api 的持续请求会导致“请求异常超时错误”。

代码如下:

import requests
import pandas as pd
from lyricsgenius import genius
from requests.models import ReadTimeoutError
import json
import time
from collections import defaultdict
from pathlib import Path
import numpy as np
import spotipy
from spotipy.oauth2 import SpotifyOAuth
from spotipy.oauth2 import SpotifyClientCredentials
import spotipy.util as util
#import os
import json
import re 




#Leveraging the client ID to pull Genius data
api = genius.Genius("******")


#bring in spotipy api
client_credentials_manager = SpotifyClientCredentials(...,requests_timeout=10000)
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

sample_artists = ['Saigon','Rich Boy','Gorilla Zoe','Lupe Fiasco'...]
lyric_read = pd.read_csv('XXLFreshmanList.csv')



query_number = 0
tracks = []
for artist in sample_artists:
    query_number += 1
    artists = []
    titles = [] 
    year =  []
    lyrics = []
    popularity = []
    print('\nQuery number:',query_number)
    #was dealing with the lyricgenius API,where it would time out after a few seconds,this solution continues to try the API call until it works 
    time.sleep(0.01)
    while True:
        try:
            artist = api.search_artist(artist,max_songs=10,sort = 'popularity',allow_name_change=True,include_features=False)
            break
        except:
            pass
    songs = artist.songs
    song_number = 0
    for song in songs:
        if song is not None:
            song_number += 1
            print('\nSong number:',song_number)
            print('\nNow adding: Artist')
            artists.append(song.artist)
            thisong = song.artist
            print('Now adding: Title')
            titles.append(song.title)
            thistitle = song.title
            print('Now adding: Lyrics')
            lyrics.append(song.lyrics)
            search_query = "artist:" + thisong + " track:" + thistitle
            try:
                sp_search = sp.search(q = search_query,limit= 1,offset = 0,market= 'US',type = 'track')
            except requests.exceptions.Timeout:
                print("Timeout occured")
            json_obj1 = json.dumps(sp_search)
            json_obj2 = json.loads(json_obj1)
            tracknum = 0
            for track in json_obj2:
                try:
                    popularity_json = json_obj2["tracks"]["items"][tracknum]["popularity"]
                    tracknum += 1
                except IndexError:
                    print("index error")
                    popularity_json = 0
                except ConnectionResetError:
                    print("connection reset error")
                    popularity_json = 0
                if popularity_json is not None:
                    popularity.append(popularity_json)
                
    a = {'artist':artists,'title':titles,'lyrics':lyrics,'popularity': popularity}
     ..Dataframe stuff...

这里是错误(为了隐私删除了一些部分):

Traceback (most recent call last):
  File "c:\...",line 98,in <module>
    sp_search = sp.search(q = search_query,type = 'track')
  File "..._qbz5n2kfra8p0\LocalCache\local-packages\python39\site-packages\spotipy\client.py",line 544,in search
    return self._get(
  File "..._qbz5n2kfra8p0\LocalCache\local-packages\python39\site-packages\spotipy\client.py",line 291,in _get
    return self._internal_call("GET",url,payload,kwargs)
  File "..._qbz5n2kfra8p0\LocalCache\local-packages\python39\site-packages\spotipy\client.py",line 240,in _internal_call
    response = self._session.request(
  File "..._qbz5n2kfra8p0\LocalCache\local-packages\python39\site-packages\requests\sessions.py",line 542,in request
    resp = self.send(prep,**send_kwargs)
  File "..._qbz5n2kfra8p0\LocalCache\local-packages\python39\site-packages\requests\sessions.py",line 655,in send
    r = adapter.send(request,**kwargs)
  File "..._qbz5n2kfra8p0\LocalCache\local-packages\python39\site-packages\requests\adapters.py",line 498,in send
    raise ConnectionError(err,request=request)
requests.exceptions.ConnectionError: ('Connection aborted.',ConnectionResetError(10054,'An existing connection was forcibly closed by the remote host',None,10054,None))

有什么方法可以修改代码以在遇到上述连接错误时继续运行吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。