44import psycopg2
55from dotenv import load_dotenv
66import validators
7+ from bs4 import BeautifulSoup
8+
79
810
911load_dotenv ()
@@ -52,7 +54,8 @@ def urls():
5254 # Объединяем запросы для получения всех URL и последней проверки
5355 cur .execute ('''
5456 SELECT u.id, u.name, u.created_at,
55- uc.status_code, uc.created_at AS last_check
57+ uc.status_code, uc.created_at AS last_check,
58+ uc.h1, uc.title, uc.description
5659 FROM urls u
5760 LEFT JOIN url_checks uc ON u.id = uc.url_id
5861 AND uc.created_at = (
@@ -86,12 +89,11 @@ def url_detail(url_id):
8689 return render_template ('result.html' , url = url , checks = checks )
8790
8891
89- @app .route ('/urls /<int:url_id>/checks ' , methods = ['POST' ])
92+ @app .route ('/check_url /<int:url_id>' , methods = ['POST' ])
9093def add_check (url_id ):
9194 conn = get_db_connection ()
9295 cur = conn .cursor ()
9396
94- # Получаем URL из базы данных
9597 cur .execute ('SELECT name FROM urls WHERE id = %s' , (url_id ,))
9698 url = cur .fetchone ()
9799
@@ -104,16 +106,33 @@ def add_check(url_id):
104106 try :
105107 response = requests .get (url_name )
106108 response .raise_for_status () # Проверка на ошибки HTTP
107- status_code = response .status_code
108109
109- # Записываем код статуса в базу данных
110- cur .execute ('INSERT INTO url_checks (url_id, status_code) VALUES (%s, %s)' , (url_id , status_code ))
111- conn .commit ()
110+ # Парсинг HTML с помощью BeautifulSoup
111+ soup = BeautifulSoup (response .text , 'html.parser' )
112+
113+ # Извлечение SEO-данных
114+ h1_tag = soup .find ('h1' )
115+ title_tag = soup .find ('title' )
116+ description_tag = soup .find ('meta' , attrs = {'name' : 'description' })
117+
118+ h1_content = h1_tag .text if h1_tag else None
119+ title_content = title_tag .text if title_tag else None
120+ description_content = description_tag ['content' ] if description_tag else None
121+
112122
113- flash (f'Проверка успешна! Код ответа: { status_code } ' )
123+ # Записываем код статуса и SEO-данные в базу данных
124+ try :
125+ cur .execute ('''
126+ INSERT INTO url_checks (url_id, status_code, h1, title, description)
127+ VALUES (%s, %s, %s, %s, %s)
128+ ''' , (url_id , response .status_code , h1_content , title_content , description_content ))
129+ conn .commit ()
130+ except Exception as e :
131+ print (f'Ошибка при вставке данных: { e } ' )
132+
133+ flash (f'Проверка успешна! Код ответа: { response .status_code } ' )
114134 except requests .exceptions .RequestException as e :
115135 flash ('Произошла ошибка при проверке.' )
116- # Логируем ошибку, если нужно
117136 print (f'Ошибка: { e } ' )
118137 finally :
119138 cur .close ()
@@ -122,7 +141,6 @@ def add_check(url_id):
122141 return redirect (url_for ('urls' ))
123142
124143
125-
126144if __name__ == '__main__' :
127145 app .run (debug = True )
128146
0 commit comments