• Как улучшить парсер?

    @sanglobalenus Автор вопроса
    soremix, код в предыдущем сообщении зачастую зависает на одной странице и висит, как его можно оптимизировать?
  • Как улучшить парсер?

    @sanglobalenus Автор вопроса
    Привет!

    Вот сделал так...

    for name in tqdm(list_names[3:4]):
        for number in tqdm(range(1,20)):  
            while True:
                headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'}
                p = {'searchQuery' : name, 
                     'page' : number}
                r = requests.get(f'https://www.renins.ru/docs/agents', params = p, headers=headers, cookies={'abc': 'all', 'count': '10'})
                if r.status_code == 200:
                    break


    Сделал через цикл While... Как можно сделать так, чтобы он не ждал окончательного ответа, а через какое-то определенное время посылал запрос заново?
    А то 20 страниц всю ночь может парсить...
  • Как из списка списков сделать вложенный список?

    @sanglobalenus Автор вопроса
    Владимир Куц, полностью код выглядит так

    import requests
    import re
    from bs4 import BeautifulSoup 
    import pandas as pd
    import io
    
    otoids = []
    
    
    for i in range(105, 111):
        i
        otoids.append(i)
    
    for otoid in otoids:
    
        s = requests.Session()
    
        r = s.get('http://oto-register.autoins.ru/oto/index.xhtml')
        cdata = re.search(r'id="j_id1:javax.faces.ViewState:0" value="(.+?)"', r.text).group(1).strip()
    
        data = {
            'javax.faces.partial.ajax': 'true',
            'javax.faces.source': 'mainForm:remoteCommandSetupOtoId_action',
            'javax.faces.partial.execute': 'mainForm:remoteCommandSetupOtoId_action',
            'javax.faces.partial.render': 'mainForm:contentTabsPanel mainForm:otoPanel',
            'mainForm:remoteCommandSetupOtoId_action': 'mainForm:remoteCommandSetupOtoId_action',
            'otoId': otoid,
            'mainForm': 'mainForm',
            'mainForm:j_idt8': otoid,
            'mainForm:j_idt9': '',
            'mainForm:j_idt10': '',
            'mainForm:j_idt11': '',
            'javax.faces.ViewState': cdata,
        }
    
        headers = {
            'X-Requested-With': 'XMLHttpRequest',
            'Faces-Request': 'partial/ajax',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
        }
    
    
        r = s.post('http://oto-register.autoins.ru/oto/index.xhtml', data=data, headers=headers)
        
        
        soup = BeautifulSoup(r.text, 'lxml')
        categories = soup.find_all(class_ = 'item with-i')
        
     
        
        
        
        akkreditation = []
        for akkr in categories:
            akkr = str(akkr).replace('<span class="item with-i">', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, для перевозки пассажиров и имеющие, помимо места водителя, не более восьми мест для сидения">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Мототранспортные средства">?</a></span>', '') 
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, используемые для перевозки пассажиров, имеющие, помимо места водителя, более восьми мест для сидения, технически допустимая максимальная масса которых не превышает 5 тонн">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, используемые для перевозки пассажиров, имеющие, помимо места водителя, более восьми мест для сидения, технически допустимая максимальная масса которых превышает 5 тонн">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, для перевозки грузов, имеющие технически допустимую максимальную массу не более 3,5 тонн">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, предназначенные для перевозки грузов, имеющие технически допустимую максимальную массу свыше 3,5 тонн, но не более 12 тонн">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, для перевозки грузов, имеющие технически допустимую максимальную массу более 12 тонн">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Прицепы (полуприцепы) к легковым и грузовым автомобилям, мотоциклам, мотороллерам и квадроциклам">?</a></span>', '')
            
            akkreditation.append(akkr)
        print(akkreditation)

    где в переменной akkreditation генерируются списки
  • Как список преобразовать в DataFrame?

    @sanglobalenus Автор вопроса
    Можно глупый вопрос?

    А как в моем случае сделать из
    ['L', 'M1', 'M2', 'M3', 'N1', 'N2', 'N3', 'O']
    ['L', 'M1', 'M2', 'M3', 'N1', 'N2', 'N3', 'O']
    ['L', 'M1', 'M2', 'M3', 'N1', 'N2', 'N3', 'O']
    ['M1']
    []
    ['L', 'M1', 'M2', 'M3', 'N1', 'N2', 'N3', 'O']


    Сделать
    [['L', 'M1', 'M2', 'M3', 'N1', 'N2', 'N3', 'O']
    ['L', 'M1', 'M2', 'M3', 'N1', 'N2', 'N3', 'O']
    ['L', 'M1', 'M2', 'M3', 'N1', 'N2', 'N3', 'O']
    ['M1']
    []
    ['L', 'M1', 'M2', 'M3', 'N1', 'N2', 'N3', 'O']]
  • Как список преобразовать в DataFrame?

    @sanglobalenus Автор вопроса
    Выводится следующее

    0 L
    1 M1
    2 M2
    3 M3
    4 N1
    5 N2
    6 N3
    7 O
  • Как список преобразовать в DataFrame?

    @sanglobalenus Автор вопроса
    import requests
    import re
    from bs4 import BeautifulSoup 
    import pandas as pd
    import io
    
    
    
    
    for i in range(105, 111):
        i
        otoids.append(i)
    
    for otoid in otoids:
    
        s = requests.Session()
    
        r = s.get('http://oto-register.autoins.ru/oto/index.xhtml')
        cdata = re.search(r'id="j_id1:javax.faces.ViewState:0" value="(.+?)"', r.text).group(1).strip()
    
        data = {
            'javax.faces.partial.ajax': 'true',
            'javax.faces.source': 'mainForm:remoteCommandSetupOtoId_action',
            'javax.faces.partial.execute': 'mainForm:remoteCommandSetupOtoId_action',
            'javax.faces.partial.render': 'mainForm:contentTabsPanel mainForm:otoPanel',
            'mainForm:remoteCommandSetupOtoId_action': 'mainForm:remoteCommandSetupOtoId_action',
            'otoId': otoid,
            'mainForm': 'mainForm',
            'mainForm:j_idt8': otoid,
            'mainForm:j_idt9': '',
            'mainForm:j_idt10': '',
            'mainForm:j_idt11': '',
            'javax.faces.ViewState': cdata,
        }
    
        headers = {
            'X-Requested-With': 'XMLHttpRequest',
            'Faces-Request': 'partial/ajax',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
        }
    
    
        r = s.post('http://oto-register.autoins.ru/oto/index.xhtml', data=data, headers=headers)
        
        
        soup = BeautifulSoup(r.text, 'lxml')
        categories = soup.find_all(class_ = 'item with-i')
        
     
        
        
        
        akkreditation = []
        for akkr in categories:
            akkr = str(akkr).replace('<span class="item with-i">', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, для перевозки пассажиров и имеющие, помимо места водителя, не более восьми мест для сидения">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Мототранспортные средства">?</a></span>', '') 
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, используемые для перевозки пассажиров, имеющие, помимо места водителя, более восьми мест для сидения, технически допустимая максимальная масса которых не превышает 5 тонн">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, используемые для перевозки пассажиров, имеющие, помимо места водителя, более восьми мест для сидения, технически допустимая максимальная масса которых превышает 5 тонн">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, для перевозки грузов, имеющие технически допустимую максимальную массу не более 3,5 тонн">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, предназначенные для перевозки грузов, имеющие технически допустимую максимальную массу свыше 3,5 тонн, но не более 12 тонн">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Транспортные средства, для перевозки грузов, имеющие технически допустимую максимальную массу более 12 тонн">?</a></span>', '')
            akkr = str(akkr).replace('<a class="tooltip more-info" href="#" title="Прицепы (полуприцепы) к легковым и грузовым автомобилям, мотоциклам, мотороллерам и квадроциклам">?</a></span>', '')
            
            akkreditation.append(akkr)
        print(akkreditation)
  • Что не так с этим регулярным выражением?

    @sanglobalenus Автор вопроса
    SoreMix, Содержимое d_1_sakhalin выглядит следующим образом "Toyota Prius Н273КК65" или "Nissan Tiida АО95565"