#python #html #pandas #api #for-loop
Вопрос:
Проблема: когда я запускаю фрагмент ниже, я получаю следующую ошибку: «Ошибка URL: <ошибка urlopen [Errno 54] Сброс соединения одноранговым узлом>».
Когда я запускаю один и тот же фрагмент с диапазоном дат вместо переменной, он работает.
У меня есть список дат, которые мне нужно передать через вызов API.
Вот процесс, который нужно воспроизвести
- создайте фрейм данных для нужных мне диапазонов дат пример
- Затем запустите цикл, чтобы получить вызов для всех диапазонов дат в первом примере фрейма данных
фрагмент кода python
earnings_info = []
for earnings_api in all_earnings['earnings_api']:
web_add = earnings_api
ticker_hist_earnings = pd.read_json(web_add)
earnings_info.append(ticker_hist_earnings)
sleep(10)
Ответ №1:
Для этого может быть несколько причин. Наиболее распространенным из них является то, что API распознал ваш вызов как вызов бота и заблокировал ваше соединение. Если вы используете встроенный URL-вызов pandas, вам необходимо переписать его, чтобы получить из библиотеки запросов и включить заголовки браузера.
import requests
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36'})
и после получения всех данных вы можете добавить эти данные в pandas df.
Комментарии:
1. интересно, что теперь появляется ошибка 429: Слишком много Запросов
2. Не могли бы вы, пожалуйста, добавить задержку между вызовами запроса
3. Привет, вы не заменили read_json на ответ. куда вы делаете запрос по телефону ? Пожалуйста, замените строку кода ticker_hist_earnings следующей строкой ticker_hist_earnings = pd.read_json(response.json())
4. Привет, да, теперь я понимаю. pd.read_json отправит внутренний запрос, и это вызовет проблему в начале. Вы получаете результаты для одного запроса, это правда. Поскольку вам нужно отправить пакет запросов, вам необходимо переключиться на архитектуру ответа на запрос. В противном случае API подумает, что вы бот. Пожалуйста, не используйте read_json. Вместо этого используйте это
from pandas import json_normalize df = json_normalize(dresponse.json())
это позволит получить все данные в pandas df5. Привет, добро пожаловать и большое вам спасибо за добрые слова. Не могли бы вы, пожалуйста, сделать мне одолжение и тоже озвучить мой ответ.