не могу понять почему при запуске ругается на строку
r = session.get("https://........." + str(userid), headers = headers, verify=False)
где я пробую использовать ранее полученную из другой функции свою сессию.
Текст ошибки:
File "./test_parser.py", line 59, in get_data
r = session.get("https://......" + str(userid), headers = headers, verify=False)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 546, in get
return self.request('GET', url, **kwargs)
#!/usr/bin/env python3
from datetime import datetime
import multiprocessing
import urllib.request
import requests
import time
import json
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
start_id = 1
last_id = 80000000
max_thread = 6
max_thread_pause = 0.1
session = ''
def get_session():
try:
# Get cookies
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0", "Host":"www.......com"}
session = requests.Session()
r = session.get('https://.......', headers = headers, verify = False)
return session
except Exception as e:
print('Exception in get_cookie: ', e)
def get_data(userid, session):
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0", "Host":"www........com"}
#В этой строке главная беда...
r = session.get("https://........." + str(userid), headers = headers, verify=False)
if(r.status_code == 200):
data = json.loads(r.text)
if 'user' in data:
print('id: ', str(data['user']['id']), ' login: ', str(data['user']['login']))
if r.status_code == 401:
data = json.loads(r.text)
if 'invalid_token' in str(data):
print('invalid_token_1')
return 'invalid_token'
if r.status_code == 404:
data = json.loads(r.text)
if 'not_found' in str(data):
return 'user_does_not_exist'
class Worker(multiprocessing.Process):
def __init__(self, name, userid, session):
super().__init__()
self.name = name
self.userid = userid
self.session = session
def run(self):
global session
result = get_data(self.userid, self.session)
#Как только пришло 'invalid_token' получаем новую сессию
if result == 'invalid_token':
print('invalid token_2')
time.sleep(30)
#Получаем новую сессию
session = get_session()
self.session = session
result = get_data(self.userid, session)
print('Debug_result_cookie_update: ', ' result: ', str(result), ' session: ', str(session))
if result != 'user_does_not_exist' and result != 'invalid_token':
if result is not None:
print(str(result))
def main():
global session
session = get_session()
for i in range(start_id, last_id):
while True:
if len(multiprocessing.active_children()) - 1 <= max_thread:
p = Worker("Process-" + str(i), i, session)
p.start()
break
else:
time.sleep(max_thread_pause)
if __name__ == "__main__":
main()
Объясню почему я обновляю сессию, при достижении пары тысяч запросов api перестают отдавать данные(получаю invalid_token) НО если сразу перезапускаю скрипт то он успешно продолжает собирать данные.