Exemple #1
0
def main2(event):
    #запуск функции с передачей переменной event (для работы виджетов)
    page_count = get_page_count(get_html(BASE_URL))
    #переменную присваиваем функции пересчета страниц, где сначала выполняется другая функция, получающая http-адрес от переменной BASE_URL
    lbl3.config(text='Всего найдено страниц: ' + str(page_count))
    #меняем текстовую часть переменной lbl3 на количество найденных страниц
    page = 1
    #переменная для счетчика
    projects = []
    #массив для хранения всей искомой информации
    while page_count != page:
        #цикл выполняется, пока переменная page не равна количеству найденных страниц
        proxy = Proxy()
        #присваиваем классу, где зададим нужные параметры
        proxy = proxy.get_proxy()
        #получать proxy-адрес
        lbl4.update()
        #обновляем виджет
        lbl4.config(text='Прокси: ' + proxy)
        #и приравниваем к полученному прокси
        global proxy1
        #глобальная переменная
        proxy1 = proxy
        #приравниваем переменные для дальнейшей проверки их совпадения
        try:  #обработчик исключительных ситуаций
            for i in range(1, 10):
                #этот цикл будет прогонять полученный прокси определенное количество раз (range - определяет, сколько раз будем его использовать для входа на сайт). Можно и каждый раз брать новый прокси, но это существенно замедлит скорость работы программы
                page += 1
                #счетчик необходим для подсчета выполненной работы
                lbl2.update()
                #обновляем виджет
                lbl2.config(text='Парсинг %d%%' % (page / page_count * 100))
                #меняет процент сделанной работы от 100%
                r = requests.get(BASE_URL + '?page=%d' % page,
                                 proxies={'https': proxy1})
                #получаем данные со страницы сайта
                parsing = BeautifulSoup(r.content, "lxml")
                #получаем html-код по средству BeautifulSoup (чтобы позже использовать поисковые возможности этого модуля) для дальнейшей передачи переменной в функцию
                projects.extend(parse(BASE_URL + '?page=%d' % page, parsing))
                #получаем данные из функции parse (передавая адрес страницы и html-код) и добавляем их в массив
                save(projects, 'proj.csv')


#вызываем функцию сохранения данных в csv, передаем туда массив projects
        except requests.exceptions.ProxyError as e:
            #неудача при подключеннии с прокси
            print(e)
            continue
        except requests.exceptions.ConnectionErroras as e:
            # не удалось сформировать запрос
            print(e)
            continue
        except requests.exceptions.ChunkedEncodingError as e:
            #сделана попытка доступа к сокету методом, запрещенным правами доступа
            print(e)
            continue