From cb64a2b1805a40bb9eae95483d7d031945fdaa30 Mon Sep 17 00:00:00 2001 From: DennisEckerskorn Date: Fri, 3 Jan 2025 09:05:04 +0100 Subject: [PATCH] Fixed Scrapper not finishing and when window closes it closes scrapper and insert to database correctly now --- .../__pycache__/Radio_Player.cpython-312.pyc | Bin 0 -> 2679 bytes .../__pycache__/scrapper.cpython-312.pyc | Bin 7439 -> 7853 bytes .../threads_manager.cpython-312.pyc | Bin 9215 -> 10028 bytes src/services/scrapper.py | 26 ++++++++++++------ .../centered_window.cpython-312.pyc | Bin 14319 -> 17200 bytes src/ui/centered_window.py | 14 ++++++---- 6 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 src/services/__pycache__/Radio_Player.cpython-312.pyc diff --git a/src/services/__pycache__/Radio_Player.cpython-312.pyc b/src/services/__pycache__/Radio_Player.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42f58a035c5e9cd719c93c5ea35c0c1f2384196d GIT binary patch literal 2679 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 E4?9u}Qvd(} delta 1923 zcmaJ?Yitx%6rQ{D*qPbcq1)Z4U_`?MKLrhU)hzT)Kq_s+7Vyr1C*^o$rCK~@hF^YsA-ZM)<`Qc6WyJyb5 z=bn4N^VpBJo=EB6x!o$qM(?{XbanVA^dQ+gv9c-X;GW=e;!!RqO*wFx;|{39BU2jILEjakkmqaJxlx<5mS8c;__C&}?=#VH;t)G$N?a)NOGYsQUmJv!V} zy&`{>aj;|-C)}{Z!b{mB=bXBCVbmvOc+J_7Nb&{A%F-^wDhO;c3sNp?^bPbU9khm7 z(OL%Zn={!d(=z;C&Y-Z2ZO;tR-b^PQ=*tXs(*SCvy@#lg%@tf`2hHY#62T%L(6y=NQofxEQBUE-V6C-hV1>GXU_EgUWFFRA17z_AzaF6vz9 zAi4cV930+tjS7F!-Q-C}xaoLhx=fhinu6@(>yQ_5b%f!pBBs60*)kF3h>~vPXA_=u zil0r1>Be(|-aPTw<2{gDx(VSCgw61$FS$F##GOfzdQr6=;RgZ==?!7=|yvH_Ntg`8Jd0!?xXycG!(9_tt;%i=EVDE8f_?BHW13<7E~x;)fptm1W1j zsp2dQt347N4US5dA5y_85`&k6ZRAP#IQUCNDO*lzb~@5FCetWF3?YsXfiFX`o#iM# zNCIcEu!U~R=qsrCEH(P=c0rL2T7_^B!OjM3hedW+`J;9%B*W$UAQR2s8H{t+^is%% zFFqqm@7 zuVR;=!}cQzdXr_*?)D+eNK-mM?W^BwM>L0yu|lxC*hK3X90~5ho|ZT0nul87>$n{= zcbvN+h)VEEFbYEKm9c6x#lobxSS*u0D6K`nGbwUQu^@|nkO+!^e{tqY21mI?hhN-I z7T37N&5Q9;1~pM}`eQXPMGP4TC;$hEUa;t*`7db@R#Xlaexg-Dp diff --git a/src/services/__pycache__/threads_manager.cpython-312.pyc b/src/services/__pycache__/threads_manager.cpython-312.pyc index c7e6f2f99ccde4c51dd4de6eba60847cf53e0595..16b6699acd54f544ee966ac744c41fbc122dfdc0 100644 GIT binary patch delta 2332 zcmcImUu;uV7{BNC-uAA${X@5Q>pHr-4Z7XA6~-TjLkDv#Fv#knC=L?3+Fr($_O_gR z3w9DW3^5~-;5?dOAZSc95)6sii-`}I_@Xf(8IcTcAmPO*i4Qm)L=DmNowge$^5{+a z-E+S4o$t@@`<-+9_s-7~-tRpgH%FhshvSp4gyy`B$eQbTaZQHHIJ0ujv)_X_p4-V~ zT&K8)_`!XIX zeI>8zBhR2Nw~LxM=ojR*C%U2zp zK$k03(RHb+EpaNJP@SZg-_U2v7~n`27#?bkU0c+Xx?x%=Bdyt9vt(LYE}6?4x|PQm z>c^|7AaC-WUOyeEye*ho_7Dz`FZtQEUaB(3shHtzMq;zV4^rdJXdApEx0*Z7kHRQS z4miU8Tg{#46Tf*}A@{8Cw)>u+Ogq-`7ddjx*F;8}T;z4RjyE@vgYs&U4AqgZ#1Qcd z!D&?ODdI|eiB}!PZW?XG(9?QK$)*&n6>vUNOsDm4<_#sIDXct2GnAsC9M-e>ILkkw zinyL`v|YGp7`icOi?n2Hu|-<|G*ljkz`{|)Srdq)D7ax7G;UZev_{!31YHAKpF~i;Q)t#L>J#{X=;8PcUz1MxcH)a3X-KTfI^TvW4Ta>#OdE}mh^KZam>LOj`ChIID!&tbb3|G|MJWb(1Dqn1)OFJ}6 z*9`6PXv7n=Hs~U4os}=Bh!tu=3|b=S-JpL=g)2)C%mfr?xcWPiyeNeir0}8?U67(T zBn5}b`;O~d>%gBYr&(A}o3?O7E14LQ$3ZGo2Mdjvk+Wh1s|tWkJ{I~>jNBFmP?&6! z!}FWP!@MHHW)BD;8wNxYs)uzGH`58Z>gx4_L%asWS`fi^rS_fx9od0mA(OJSqy-6? z$;nhst27$N==yS_$(Xbr#mPzOClsEatoasoF}jF4Jq{*r1y^DL>xRYZUlQ$jZhS&U{=!#cFpi>X{})C zc>`|%j};ywZ82ClOgG;6j=roGsK<(6NX4XjF{&N`cOFD zN`<)$J!s%yO|_G2-Vk}X%7YHf*9Jb}kxag*zk&i}BG~PL^TCpunW5eKAh;F1N^S)E zXtz9}GtOth$qw>SsJ`J}hM?XBzPqXK268nRL`TSjP+tI;eivA%)|A^BA%hL8`&r+_ z)FDg5E2UJKvj@EGq=Mx>v3)xuFjlE%stNoHdQLk;<{K_mICQM>ErdMeVfadWIYEe5 zhM2KxxgK!5i(G5kf=a{{8K&DuBXMWBd*o!KDZ$z|24>5MK9ZkUzCB!nV6r=)(OX^1 zn~JF$3S}SeSMVdS*kU?gq#Xb6{>2$L?zB2dM{58P(%;%Q&Uy$SsZynfkg5}>j7&a9 zZ(I6?L$iY2GC8YF(CG%&goz3?Pf*2Fb2Sz^Lw;^GT@WXs`bnxSKHW&ixCI2C$=Ec?} zNf5U!`F-LrT8h<*>&YK&EzOV*+pGHUD2!QM2Vr!CY-&F`YzIvZAJfyC8E1b$l4I

X;q7}7gu|qj?2<9si0n#3jQ^jwk7FoxWib7m z@3gR!;Ac-LwXhL^0_zW|xL=3wZ=b+bHhj_c(E)na+(r6-ngYA-yCCJrvv`UUekt2u zc4%9=z}A>63p5ILLTpQesb;7H6LuyNKMR_ZDM}vRs z4#K+n>ES54aQus=&5N^^qntNu7N_j_egvbAH<2uiRL_WZGnou;h7bLtECt{B$5?D5 z6?jeVpz?T_fYResRn~~`MqC}AW#_pKp9O~+$Q^GbND%CYd%@0u1~O`_RtkCB%-NKW zm7C8mnuhG=ki>n9h!vr;p@&!(Tnzn;q0R7@?6@1FXq$^zg=Lp3j<3RtC0o?t7U1XA zQmI&)_o{M~61sO3J8zx0c8jWLgKPxe)2^}@qynuQr|W-UOoO55!3K)K`w1vnu0bW* z&O-1`v_&^i;brPDb0<$S>q1!4;e&V#zK;gk)W+@Tb@@4Juj@-RH{uoU_Lz%C4v~py z(;<>X2#*kI1|LS)O`J3x2uqz9sztME7WN|N`a8X$G=C&xsvpPJSp!VR4@8Jpk>>I; zGI=F_n9ac5)&%?#Z^OdX*0&FglE)(mIC&DDZgt!9HAzm!5kxsN6BE3dH0=mW2`neU&cV&Z4Uds> z@(sqq@Ox^#Z%>Zyl+f@!m>T&Q7Tv#>4#KZ(jjVhnJ%z3wO%JLrqp*}tJS8YSPGNVt zy(dwhaPRn!K6xVd_|&wcOrAJ1Ef^5J_hYy`zn>2#j~WK1LU8sd2K5 zw3MxkRV-x|Op}jh_@0(HzS(jWufPLb<2mH(e&;ZI6NbA+&IrE9!U%YLq3ozUUn-Or z9Y3vfjdt6!Gn?Bt^94L0dOqV-ufykEI=civc3FOMpEWc%+dX)$1!bNh=q4B-pxeP| zZUx&sL((Y%9pQ$=>AX7)0g?zP0qbFe%hI<>^OhX)4Q{33ukL}AFeVfH=}h6`68H>B w1$dn+a diff --git a/src/services/scrapper.py b/src/services/scrapper.py index 22a1486..4dfa30b 100644 --- a/src/services/scrapper.py +++ b/src/services/scrapper.py @@ -4,6 +4,7 @@ from bs4 import BeautifulSoup from urllib.parse import urljoin import mysql.connector from queue import Queue +from services.threaden_task import ThreadenTask #http://books.toscrape.com/ test scrap web @@ -11,7 +12,7 @@ class Scrapper: def __init__(self, ui_instance): self.ui_instance = ui_instance self.visited_links = set() - self.running=False + self.running = False self.lock = threading.Lock() self.link_queue = Queue() @@ -31,6 +32,10 @@ class Scrapper: except Exception as e: print(f"Error al conectar a la base de datos: {e}") + #Tareas para el scrapping y la base de datos + self.scraping_task = ThreadenTask() + self.db_task = ThreadenTask() + def start_scraping(self): """Inicia el proceso de scraping""" if self.running: @@ -38,20 +43,24 @@ class Scrapper: return self.running = True + self.visited_links.clear() + self.link_queue.queue.clear() + url = self.get_url_from_ui() if url: print(f"Iniciando scraping en: {url}") - threading.Thread(target=self.scrape_page, args=(url,), daemon=True).start() - threading.Thread(target=self.insert_links_to_db, daemon=True).start() + self.scraping_task.start(self.scrape_page, url) + self.db_task.start(self.insert_links_to_db) else: print("No se proporcionó una URL válida.") def stop_scraping(self): """Detiene el proceso de scraping""" - print("Deteniendo el proceso de scraping...") + print("Deteniendo el proceso de scraping...") + self.running = False # Detener las tareas - self.scraping_task.stop_thread() - self.db_task.stop() + self.scraping_task.stop() + self.db_task.stop() # Inserta un sentinel (None) en la cola para detener el hilo de inserción self.link_queue.put(None) @@ -79,7 +88,8 @@ class Scrapper: if response.status_code == 200: soup = BeautifulSoup(response.text, "html.parser") links = [urljoin(url, a.get("href")) for a in soup.find_all("a", href=True)] - self.update_ui(url, links) + if self.running: + self.update_ui(url, links) for link in links: if not self.running: @@ -112,7 +122,7 @@ class Scrapper: def insert_links_to_db(self): """Inserta los enlaces en la base de datos desde la cola""" - while True: + while self.db_task.running: try: # Obtener un enlace de la cola item = self.link_queue.get(timeout=1) diff --git a/src/ui/__pycache__/centered_window.cpython-312.pyc b/src/ui/__pycache__/centered_window.cpython-312.pyc index 6918e9df53f194c3919148e4c5bf28a8e548591c..1081e5a18e5c21537726e08aef87b96e07d93579 100644 GIT binary patch delta 5470 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 qdYh~H7jD~aZu@Pn;i delta 3270 zcmaJ@YfK#16`s4Z3(LM(c3EJ}V+X?mV*`Gb8oMzz;23Pxyi;4-IO}C+47=>^;5!2b zv<|N7#8_?|=vC_^u9f6ZC1fHwMr!@TYSqTS(*A%ZE!MOs?juc6el+nTjnb;>IkP-m zxAF+io_p@O=bn4+ch0#tUM7E6T)%QUZ5(`6XO9ouu9Olu#Z`U-kW$PEFG{>5E=d+W%%{*=rc{XILEAJ3 z>E=^PN?WnO{v)=@~>`$IT_6CgYIr(f~zLp?d_6Ea->;?g+|0?qN;nbemlO0fOZo%k1bfBrw;K`Pikk{-rclUw7Fe}& ze#!qiaX;WlA9;~HgH?kWEt zyF0+{byH?9!fE2#uIcQxNI`Ub>ryVhg%ODN?Q+3cudP?gcrC^t*DU$d{8jFnN!m15 z3~v1>H!#W1!9myTPn*7X!px0xVo66Iq+=7vHwdJ}0TeU?(X-^SVaP(-f|6Dsv4>y< z*6cH82j$qnAZ9cw)3ZQebp)q!IwGU;Ktxigp53a@{Zv*|-Ew3^9#Hh`-k7S%$%vsD zn?{4?4GSB4=~gMGM*0)7B(h7Ji+6krH~9{3LNa^7wZdq^){DJGXp1Ce`T|ayGAC$Z zOPfn4C!DQNwd7PxQUpmBW=*sU?Q|pQMeRa*3i$yfgFtk?ud_=xw{-Tk>$cXup}t7} zXiPq%^ASnP2%r}BD`RvEDx0-Pze=-kF_xfA`|+r<7FNgcl(ukENyRiMlqsfE6q6Xc zR8i}J6yoSkBtt+%CzQlH6TL&W=vevbWtdI+zNm;k6XdYHj&+&7)hoS zfp)Tzx{H(F0GV!1$fwX3qnFvvK(k56sR3kELs6amGzNKp|1tCiE_k=gJPOy zVDkR_&HAqsQZ>J_?V3rzz)iT?6&l$q)Ya`Z{^-jfq;p7q%--3VJY<9zBLxRKfa3MQ zh_(&Sbz8rpX-YEO4}miBC<{`kuk$E<7uO82le_#CF|+~?0F+z>qGHVxR&i7hywRBo z>>H;3#(utQ1#W%zYbW!b#KldvsX=J?C)%+CImi9M>RfPD|JGV#v{sSVtw%=^TC90^ z_>(tY$8TjneIGQ%T=tg(!O2`;X%P~9_|dIMFuUkwB-2P{kYFS!dPi>p(Vby<5Jprr zDkl=*Fo32Kq{cJyKqf=2sEWje6A05U&vTDV#g;wy_gXEr_X}*6!uusVY?dweY3OXs1|8Qacs85e>e{mS}GQjtayaufYM r3<31;++m-#Y^wN}+qKL!EOT3zxg8I)Qall-d#@auIrfM{-mvf=fTcb$ diff --git a/src/ui/centered_window.py b/src/ui/centered_window.py index d24d90d..bea818b 100644 --- a/src/ui/centered_window.py +++ b/src/ui/centered_window.py @@ -64,6 +64,9 @@ class CenteredWindow(ctk.CTk): if "tetris_game" in self.thread_manager.tasks: self.thread_manager.tasks["tetris_game"].stop() + if hasattr(self.thread_manager, "scrapper"): + self.thread_manager.scrapper.stop_scraping() + self.destroy() @@ -112,11 +115,10 @@ class CenteredWindow(ctk.CTk): self.left_panel = left_panel self.left_panel.url_entry = url_entry self.left_panel.url_entry_chrome = url_entry_chrome - start_button = ctk.CTkButton(left_panel, text="Iniciar Scrapping", command=lambda: - self.thread_manager.tasks["scrapper"].start(self.thread_manager.scrapper.start_scraping)) + start_button = ctk.CTkButton(left_panel, text="Iniciar Scrapping", command=self.thread_manager.scrapper.start_scraping) start_button.pack(pady=5, padx=10) - stop_button = ctk.CTkButton(left_panel, text="Detener Scrapping", command=self.thread_manager.tasks["scrapper"].stop) + stop_button = ctk.CTkButton(left_panel, text="Detener Scrapping", command=self.thread_manager.scrapper.stop_scraping) stop_button.pack(pady=5, padx=10) @@ -177,10 +179,10 @@ class CenteredWindow(ctk.CTk): self.tetris_game = TetrisGame(game_frame) self.tetris_game.pack() - else: + # else: # Agregar contenido genérico a otras pestañas - label = ctk.CTkLabel(tab, text=f"Contenido de {tab_name}", font=("Arial", 12)) - label.pack(pady=10) + #label = ctk.CTkLabel(tab, text=f"Contenido de {tab_name}", font=("Arial", 12)) + #label.pack(pady=10)