№3Урок по парсингу🐍

Сегодня мы продолжим уроки по парсингу.Сделаем маленкий сайт с данными парсера.Использовать буду Flask.

pip install Flask

Сделаю сервер и сделаю скрипт с просмотром времени.

import requests from bs4 import BeautifulSoup url = 'https://proglib.io/?tags%5B%5D=all&page=1' responce = requests.get(url) soup = BeautifulSoup(responce.text, 'html.parser') content_card = soup.find_all('div', class_='preview-card__content') review_card=soup.find_all('div',class_='preview-card__text') content_list = [] review_list=[] for card in content_card: content_text = card.get_text(strip=True) content_list.append(content_text) for review in review_card: review_text=review.get_text(strip=True) review_list.append(review_text) result = content_list +review_list
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="{{ url_for('static', filename='main.css') }}"> <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;500;700&display=swap" rel="stylesheet"> <title>Мой работы</title> </head> <body> <header> <div class="inner"> <div class="logo"> <div> <h1>Утегенов Тархан</h1> </div> </div> <nav> <li><span><a href="">О проекте</a></span></li> <li><span><a href="" class="button">Подпишись</a></span></li> </nav> </div> </header> <h1>{{greeting}}</h1> <h1>Список новостей</h1> <ul> {% for content_item in content_list %} <li>{{ content_item }}</li> {% endfor %} </ul> <footer class="footer"> <div class="container"> <div class="row"> <div class="footer-col"> <h4>Автор</h4> <ul> <li><a href="#">Обо мне</a></li> </ul> </div> <div class="footer-col"> <h4>Помощь</h4> <ul> <li><a href="#">FAQ</a></li> </ul> </div> <div class="footer-col"> <h4>Github</h4> <ul> <li><a href="https://github.com/PythonsIDEAS/flask_site">Открытый код</a></li> </ul> </div> </div> </div> </footer> </body> </html>
from flask import Flask,render_template import datetime app = Flask(__name__) @app.route('/') def hello(): now = datetime.datetime.now() if now.hour >= 6 and now.hour < 12: greeting = 'Доброе утро' elif now.hour >= 12 and now.hour < 18: greeting = 'Добрый день' elif now.hour >= 18 and now.hour < 24: greeting = 'Добрый вечер' else: greeting = 'Доброй ночи' return render_template('main.html', greeting=greeting) if __name__ == '__main__': app.run(debug=True)

Теперь мы дадим сайту наши данные.

№3Урок по парсингу🐍

Дадим данные сайту.

from flask import Flask,render_template import datetime from scraper import result app = Flask(__name__) @app.route('/') def hello(): now = datetime.datetime.now() if now.hour >= 6 and now.hour < 12: greeting = 'Доброе утро' elif now.hour >= 12 and now.hour < 18: greeting = 'Добрый день' elif now.hour >= 18 and now.hour < 24: greeting = 'Добрый вечер' else: greeting = 'Доброй ночи' return render_template('main.html', greeting=greeting,content_list=result) if __name__ == '__main__': app.run(debug=True)
<ul> {% for content_item in content_list %} <li>{{ content_item }}</li> {% endfor %} </ul>
№3Урок по парсингу🐍

Ну вот и все.

1
Начать дискуссию
\n","lang":""}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"from flask import Flask,render_template\nimport datetime\n\napp = Flask(__name__)\n\n@app.route('/')\ndef hello():\n now = datetime.datetime.now()\n if now.hour >= 6 and now.hour < 12:\n greeting = 'Доброе утро'\n elif now.hour >= 12 and now.hour < 18:\n greeting = 'Добрый день'\n elif now.hour >= 18 and now.hour < 24:\n greeting = 'Добрый вечер'\n else:\n greeting = 'Доброй ночи'\n\n\n\n\n\n return render_template('main.html', greeting=greeting)\n\nif __name__ == '__main__':\n app.run(debug=True)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь мы дадим сайту наши данные.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"b86e97b2-0352-5f84-a052-15a7aba6ec08","width":1920,"height":1080,"size":52482,"type":"png","color":"312d34","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAJQAlAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAgQHCP/EACkQAAEBBQQLAAAAAAAAAAAAAAEIAAIFBiEDBBHREhYmMTZEUXGBkZT/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/8QAHBEBAAEEAwAAAAAAAAAAAAAAAAECEjFRESKh/9oADAMBAAIRAxEAPwDQLqeFRuO6IkhNlBQmAXgn2XWu6Duq2Ap0VITjqWm7xA71kxzCe2/VNM0TNTaKJ7jzdp17tlOBGSRmyaseJor9tpmwb//Z"}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Дадим данные сайту.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"from flask import Flask,render_template\nimport datetime\nfrom scraper import result\napp = Flask(__name__)\n\n@app.route('/')\ndef hello():\n now = datetime.datetime.now()\n if now.hour >= 6 and now.hour < 12:\n greeting = 'Доброе утро'\n elif now.hour >= 12 and now.hour < 18:\n greeting = 'Добрый день'\n elif now.hour >= 18 and now.hour < 24:\n greeting = 'Добрый вечер'\n else:\n greeting = 'Доброй ночи'\n\n\n\n\n\n return render_template('main.html', greeting=greeting,content_list=result)\n\nif __name__ == '__main__':\n app.run(debug=True)","lang":""}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"","lang":""}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"0b8f8c07-8eaa-5d9c-bd76-0e77a3a9c91b","width":1920,"height":1080,"size":130671,"type":"png","color":"d7cbac","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAJQAlAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABAgJ/8QAJxAAAQIEAwkBAAAAAAAAAAAAAQIFAAMEBwYRMRIVFhdRUnGUodH/xAAWAQEBAQAAAAAAAAAAAAAAAAABAgD/xAAbEQACAgMBAAAAAAAAAAAAAAAAARESAjFRkf/aAAwDAQACEQMRAD8AvSjtRaOclKEWnwmpOgO55KvpENmVbLog2VtMTnyqwsM+jVJjSyZfX6zHwvj0lKSl4rQdk6VC+7zC3olAOJcRjR/cvbmfsMgf/9k="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ну вот и все.

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":0,"reposts":0,"views":278,"hits":1271,"reads":null,"online":0},"dateFavorite":0,"hitsCount":1271,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1510590/949603-o3urok-po-parsingu","author":{"id":1510590,"name":"Python Idea","nickname":null,"description":"Раскажу вам о всех чертогах постижения IT и покажу что программистом могут стать все, если захотят и подпишутся на меня,конечно.","uri":"","avatar":{"type":"image","data":{"uuid":"2f87cc08-8d35-5587-947b-9b51331b9a0b","width":2560,"height":1440,"size":1257538,"type":"png","color":"1c1c1c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"d61baea8-5da2-5fb5-8aa8-b95dde4fbbb3","width":1920,"height":1080,"size":913739,"type":"png","color":"14120f","hash":"","external_service":[]}},"cover_y":26},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":3943935,"userId":1510590,"count":0,"shareImage":"https://api.vc.ru/achievements/share/3943935"}],"lastModificationDate":1764925907,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1510590,"name":"Python Idea","nickname":null,"description":"Раскажу вам о всех чертогах постижения IT и покажу что программистом могут стать все, если захотят и подпишутся на меня,конечно.","uri":"","avatar":{"type":"image","data":{"uuid":"2f87cc08-8d35-5587-947b-9b51331b9a0b","width":2560,"height":1440,"size":1257538,"type":"png","color":"1c1c1c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"d61baea8-5da2-5fb5-8aa8-b95dde4fbbb3","width":1920,"height":1080,"size":913739,"type":"png","color":"14120f","hash":"","external_service":[]}},"cover_y":26},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":3943935,"userId":1510590,"count":0,"shareImage":"https://api.vc.ru/achievements/share/3943935"}],"lastModificationDate":1764925907,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":1}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null,"keywords":[],"media":null,"customCover":null,"robotsTag":null,"categories":[],"isAnonymized":true}};