@HexUserHex

Почему возникает ошибка при передачи сессии между функциями в моем парсере?

не могу понять почему при запуске ругается на строку
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) НО если сразу перезапускаю скрипт то он успешно продолжает собирать данные.
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы