Здравствуйте!
Вчера я рассказывал вам про необычную серию учебников по программированию.
А сегодня продолжу рассказ о том, как я делаю свой первый проект с помощью Django без наставника, первую часть можно почитать по ссылке.
Ещё три дня разработки.
Ну на самом деле не три, в день я занимаюсь проектом по 1,5-2 часа, но с прошлой статьи прошло 3 дня.
Итак, я начал собирать нужные мне данные по книгам с магазина Labirint. Первое, что хочется сказать ребятам, которые работают над этим сайтом: "Почему у вас в вёрстке такой бардак?". Пока найдёшь нужную тебе информацию, можно поломать мозг. "Знатоки" и "профи", конечно, могут возразить мне, что у ребят, наверное, такая защита от парсинга. Не всё то защита от парсинга, что бардак. Защита от парсинга вон у Ozon, у них там постоянно данные обновляются в названиях классов, а у Labirinta это, по-моему, называется "спустя рукава". Вы поймёте моё возмущение, когда сами будете забирать нужные вам данные с сайтов, это такой разгон ненужной фантазии в вёрстке, что мама не горюй. И ведь вроде бы все читали учебники, все за стайл гайды и читабельную вёрстку, но вся эта правильность существует, пока ты реально не заглянешь в код этой вёрстки.
Ну ладно, с горем пополам данные с Labirint я забрал и решил сложить их в словарик, причислив каждой книжечке свой id в словарике, чтобы потом сподручнее было добавлять книжечки в базу данных и производить поиск c сайта из базы, а не каждый раз из Labirint. Сначала я столкнулся с тем, что я не смог разложить данные по полочкам в словарике, но это произошло из-за моей глупости. Позже я разобрался запустил процесс и всё получилось.
И тут я подумал: А дай-ка я попробую на разных запросах. Попробовал. И снова я вспомнил добрыми словами веб-разработчиков Labirint. Дело в том, что под автора книги в коде закономерно существует свой тег. И всё было бы просто отлично, если бы не было книг без авторов. И знаете, как ребята из Labirint решили выйти из этого положения? Они, видимо, в базе данных у таких книг поставили Null на месте автора, а в условиях к тегу поставили, что если значение Null, то тег этот вообще не использовать. Что я могу сказать? М-о-л-о-д-ц-ы. Фиг с ним со мной приключилась неприятная ситуация(расскажу сейчас какая), так придёт новый веб-разработчик и скажет: что тут вообще происходит?. Почему нельзя было поставить значение "Нет автора"? Секрет.
А вот, что произошло со мной: названий книг находилось 60 штук и они помещались в отдельный список, а авторов находилось 57 штук и эти ребята находились в своём списке. А так как я эти списки использую в цикле для добавления данных в словарь, то и цикл стал ругаться, что я вышел за границы списка в списке "авторы". Я долго матюкался, ковырял опять Labirint, и нашёл, как мне кажется, отличное решение. У обложек книг есть атрибут alt, этот атрибут показывает название и автора книги при наведении на картинку. Чаще всего он используется для читалок с экрана, чтобы помогать людям с ограниченными способностями. И я стал брать автора из этого атрибута, а там, где автора нет, там оставалось название книги. Как позже выяснилось, такая идея с автором/названием пришла мне не одному. Так я благополучно разобрался с данными с Labirint.
И перешёл к сайту Book24. Знаете сколько времени я потратил на то, чтобы забрать нужные данные с Book24? 15 минут. Знаете почему? Потому что адекватная вёрстка. Супер логичная и супер адекватная вёрстка. И как вы думаете, как они поступили с отсутствием авторов у некоторых книг? Так же, как я в случае с Labirint, они прописали в теге author, что если он отсутствует — берите название книги. У дура умных людей мысли сходятся.
Полезные привычки.
Так как на ваш сайт не всегда будут заходить адекватные люди, тестируйте запросы поиска на случай неадекватных запросов и обрабатывайте ваши функции, оберегая их от ошибок с помощью try:... except.
Парсинг сайтов это отличная возможность поупражняться со строковыми методами, потому что из HTML данные будут приходить в не очень привлекательном виде, и, чтобы привести их в удобоваримый вид, вам часто придётся пользоваться строковыми методами.
Далее, после того, как вы написали функцию, проверили её работоспособность с различными запросами, проверили её стрессоустойчивость, сделайте её немного красивее/читабельнее. На данный момент от этой функции мало зависит работа сайта и на этом моменте косметические правки будут в самую пору, потом это сможет сломать работу сайта, а пока что это безболезненно.
После того, как навели "косметику", опишите в начале каждой функции в её теле на самом верху вот в такой конструкции """Тут текст""", то, что функция делает. Потом это вам сильно поможет, когда вы встретите эту функцию в коде через пару месяцев и захотите узнать, что это, для этого, например, в PyCharm достаточно нажать на функцию и нажать Ctrl+Q и выйдет подсказка с вашим описанием. Это безумно удобно. Делайте это сразу после того, как функция готова, потом вам будет снчала лень этим заниматься, а позже вы и вовсе забудете, что это нужно сделать.
На сегодня всё, встретимся завтра.
Приятного вам обучения!
Если понравилась статья, поставьте, пожалуйста, лайк! А если вы ещё не с нами, то обязательно подписывайтесь, тут полезно и интересно.
Предыдущая статья. ............................................................... Следующая статья.