natalija96
Есть сайт, который разделен на несколько страниц.
Этот сайт с ошибками. Там нет закрывающего тега </font> по всей странице. Может, это и специально сделано. В реале сайты как раз не все идеальны и приходится работать с повреждёнными страницами.
Так что, думаю, разбирать его надо не через lxml, а через regexp'ы. lxml просто скажет “вижу повреждённую страницу и дальше работать не буду”, хотя там есть и какое-то игнорирование ошибок. Лучше regexp'ы использовать, так как они надёжнее и под полным контролем разработчика.
Что насчёт страниц, нужно использовать либо простенький в использовании requests, не входящий в библиотеку питона, либо сложненький в использовании модуль urllib.request, входящий в библиотеку питона. Я предпочитаю обычно urllib.request, так как он надёжнее и находится под контролем разработчиков самого питона - то есть никуда не денется в случае ухода автора.
Скачиваешь первую страницу, на ней отыскиваешь ссылки. Так как ссылки относительные, то конструируешь из них абсолютные ссылки. Затем создаёшь словарь из пар (номер, абсолютная ссылка), а дальше из этого словаря выбираешь для ключей 0 и 1 значения. Всё это делать надо по порядку в цикле. Потом в каждую ссылку заходишь всё тем же модулем для скачивания страницы и оттуда уже берёшь не ссылки, а числа как текстовые данные. Это важный этап, его нельзя пропускать, потому что часто числа на страницах записаны не так, как принято в языке их записывать, из-за чего требуется сначала выполнить конвертацию в правильный формат числа. Потом эти числа преобразуешь из текстового вида в числовой. И потом уже эти числа складываешь и результат запоминаешь (чтобы прибавить этот результата к результату со следующей страницы). Дальше у тебя результат есть, ты в цикле делаешь всё то же самое со следующей страницей и получаешь результат с неё. Потом результаты складываются. И потом происходит выход из цикла, так как все заданные страницы закончились и там уже выводится просуммированный результат со всех страниц.
Нужно понимать, что задание на 0 и 1 не является фиксированным и завтра тебе скажут вычислить для страниц 5, 8, 15, и 32 и не сумму, а разность. Поэтому программу нужно писать с учётом всех изменений в задании, которые могут возникнуть, чтобы сто программ не писать при каждом мелком изменении задачи.
Я представляю эту программу как набор функций в одном скрипте строк на сто.
Делать её всю за тебя я бы стал лет десять назад, чтобы самому научиться и потренироваться. Так и делал раньше и сейчас делаю, когда задание обнажает мои пробелы в знаниях. Но сегодня мне эта программа ничего в плане опыта не даст, как раньше дала бы.
Может, кто-то из новичков тебе и поможет, чтобы самому потренироваться. Программка-то хорошая и тренирует всё правильно.