Ë
    }j:7  ã                   óÊ  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ ej                  j                  ej                  j                  e«      «      Zej                  j%                  ed«      ZdZdZdZd	Zd
ZdZej                  j%                  ed«      ZddddœZd„ Zd„ Zd„ Zdd„Zd„ Z d„ Z!d„ Z"d„ Z#dd„Z$d„ Z%d„ Z&d„ Z'dd„Z(e)dk(  r e'«        yy)u¤  
crawl_cz_sthjj.py â€” éƒ´å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ å»ºè®¾é¡¹ç›®å�—ç�†æƒ…å†µå…¬å¼€ çˆ¬è™«
============================================================
ç«™ç‚¹: https://sthjj.czs.gov.cn/zwgk/xxgkml/hjpj/jsxmhbspqgs/
ç‰¹ç‚¹: å¤©èž�ä¿¡WAFé˜²æŠ¤ï¼Œéœ€ Playwright ç»•è¿‡ JS æŒ‘æˆ˜
åˆ—è¡¨: UL > LI > a[href*='content_']ï¼Œæ¯�é¡µ16æ�¡
è¯¦æƒ…: æ–‡å­—ä¿¡æ�¯ï¼ˆé¡¹ç›®å��ç§°/å»ºè®¾åœ°ç‚¹/å»ºè®¾å�•ä½�ç­‰ï¼‰+ PDFé™„ä»¶
åˆ†é¡µ: default.htm, default_1.htm, ... (offset=1530 â‰ˆ 97é¡µ)

ç”¨æ³•:
  python3 crawl_cz_sthjj.py           # å¢žé‡�çˆ¬
  python3 crawl_cz_sthjj.py --full    # å…¨é‡�çˆ¬
  python3 crawl_cz_sthjj.py --test N  # æµ‹è¯•Næ�¡
  python3 crawl_cz_sthjj.py --sync    # ä»…å�Œæ­¥
é    N)Úurljoin)Úsync_playwrightzcz_sthjj_results.dbõ   éƒ´å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€zsthjj.czs.gov.cnzroot@1.94.217.116ú/root/search.dbzAhttps://sthjj.czs.gov.cn/zwgk/xxgkml/hjpj/jsxmhbspqgs/default.htmz6https://sthjj.czs.gov.cn/zwgk/xxgkml/hjpj/jsxmhbspqgs/z.cz_sthjj_chkpt)ÚnewÚskipÚerrorsc                 óz   — t        t        d«      5 }|j                  | › d|› �«       ddd«       y# 1 sw Y   yxY w)u)   ä¿�å­˜æ–­ç‚¹ï¼šç¬¬page_numé¡µçš„ç¬¬idxæ�¡Úwú|N)ÚopenÚCHECKPOINT_FILEÚwrite)Úpage_numÚidxÚfs      ú#/root/gov_crawler/crawl_cz_sthjj.pyÚsave_checkpointr   #   s:   € ä	Œo˜sÓ	#ð % qØ	�‰�8�*˜A˜c˜UÐ#Ô$÷%÷ %ñ %ús   ‘1±:c                  ó6  — t         j                  j                  t        «      rc	 t	        t        «      5 } | j                  «       j                  «       j                  d«      }t        |d   «      t        |d   «      fcddd«       S y# 1 sw Y   yxY w#  Y yxY w)u$   è¯»å�–æ–­ç‚¹ï¼Œè¿”å›ž(page_num, idx)r   r   é   N)r   r   )	ÚosÚpathÚexistsr   r   ÚreadÚstripÚsplitÚint)r   Úpartss     r   Úload_checkpointr   (   s�   € ä	‡w�w‡~�~”oÔ&ð	Ü”oÓ&ð 4¨!ØŸ™›Ÿ™Ó(×.Ñ.¨sÓ3�Ü˜5 ™8“}¤c¨%°©(£mÐ3÷4ñ 4ð
 ÷4ð
 ûð	ØØús)   ¥B ´A	BÁ=	B ÂBÂB ÂB ÂBc                  ó~   — t         j                  j                  t        «      rt        j                  t        «       y y ©N)r   r   r   r   Úremove© ó    r   Úclear_checkpointr%   3   s#   € Ü	‡w�w‡~�~”oÔ&Ü
�	‰	”/Õ"ð 'r$   c                 ó  — 	 | r| j                    | r|r|j                   | |fS # t        $ r t        d«       Y nw xY wt	        «       j                  «       }|j                  j                  d¬«      } | j                  ddddœ¬«      }| |fS )	uB   æ£€æŸ¥ Playwright è¿žæŽ¥çŠ¶æ€�ï¼Œæ–­å¼€åˆ™é‡�å»º browser + contextu<     ðŸ”„ Playwright è¿žæŽ¥æ–­å¼€ï¼Œé‡�å»º browser + context...T©ÚheadlessúoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36é€  é8  ©ÚwidthÚheight©Ú
user_agentÚviewport)	ÚcontextsÚpagesÚ	ExceptionÚprintr   Ú	__enter__ÚchromiumÚlaunchÚnew_context)Úbrowser_objÚcontext_objÚpws      r   Úensure_browserr=   7   sŸ   € ðNÙØ× Ò Ù™;Ø×ÒØ˜KÐ'Ð'øÜò NÜÐLÖMðNúä	Ó	×	$Ñ	$Ó	&€BØ—+‘+×$Ñ$¨dÐ$Ó3€KØ×)Ñ)ð EØ¨4Ñ0ð *ó €Kð ˜Ð#Ð#s   ‚!$ ¤;º;c                  óº   — t        j                  t        «      } | j                  d«       | j                  d«       | j	                  «        | j                  «        y )NúPRAGMA journal_mode=WALuK  CREATE TABLE IF NOT EXISTS crawl_results (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        site_name TEXT DEFAULT 'éƒ´å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€',
        title TEXT,
        url TEXT UNIQUE,
        content TEXT,
        publish_date TEXT,
        summary TEXT,
        crawled_at TEXT DEFAULT (datetime('now','localtime'))
    ))Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcommitÚclose)Úconns    r   Úinit_dbrG   I   sB   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�Lð 		ô 	
ð 	‡K�K„MØ‡J�J…Lr$   c                 ód  — t        j                  t        «      }	 |j                  d| ||||f«       |j	                  «        |j
                  dkD  rt        dxx   dz  cc<   nt        dxx   dz  cc<   |j                  «        y #  t        dxx   dz  cc<   Y Œ&xY w# |j                  «        w xY w)NzcINSERT OR IGNORE INTO crawl_results (title, url, content, publish_date, summary) VALUES (?,?,?,?,?)r   r   r   r   r	   )r@   rA   rB   rC   rD   Útotal_changesÚstatsrE   )ÚtitleÚurlÚcontentÚdateÚsummaryrF   s         r   Ústore_recordrP   Y   s•   € Ü�?‰?œ7Ó#€DðØ�‰ð!ð �C˜ $¨Ð0ô		
ð 	�‰ŒØ×Ñ Ò!Ü�%‹L˜AÑŒLä�&‹M˜QÑ‹Mð 	�
‰
�øðÜˆh‹˜1Ñ�ûà�
‰
�ús   ›AB ÂBÂB ÂB/c                 óJ   — | €ydt        | «      j                  dd«      z   dz   S )Nz''ú')ÚstrÚreplace)Úvs    r   ÚescrV   l   s(   € Ø€y˜Ø”�Q“—‘  TÓ*Ñ*¨SÑ0Ð0r$   c                  ó  — t        d«       t        j                  t        «      } | j	                  d«      j                  «       }| j                  «        |st        d«       yt        j                  d«      }|j	                  d«       d}d}|D ]J  }|\  }}}}	}
	 |j	                  d	|||xs d
dd |	xs d
|
xs d
dd |d
f«       |j                  dkD  r|dz  }ŒL |dkD  r3|j                  «        |j	                  d|f«       |j                  «        |j	                  d|f«      j                  «       d   }|j                  «        t        d|› dt        |«      › d|› d�«       y# t        $ r}t        d|› �«       Y d}~Œôd}~ww xY w)u@   å°†æœ¬åœ°æ•°æ�®ç›´æŽ¥å†™å…¥ search.dbï¼ˆæœ�åŠ¡å™¨æœ¬åœ°æ¨¡å¼�ï¼‰u   
ðŸ“¤ å�Œæ­¥åˆ° search.db...zPSELECT title, url, content, publish_date, summary FROM crawl_results ORDER BY idu     æœ¬åœ°æ²¡æœ‰æ•°æ�®Nr   r?   r   r   zwINSERT OR IGNORE INTO gov_raw (title, page_url, content, publish_date, summary, site_name, tags) VALUES (?,?,?,?,?,?,?)Ú i ¡ i,  r   z	  Error: z±INSERT INTO gov_search(rowid,title,site_name,summary) SELECT r.id,r.title,r.site_name,r.summary FROM gov_raw r WHERE r.id NOT IN (SELECT rowid FROM gov_search) AND r.site_name=?z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?z  OK ú/u    æ�¡å�Œæ­¥åˆ° search.db (DBå…±õ   æ�¡))r5   r@   rA   rB   rC   ÚfetchallrE   rI   r4   rD   ÚfetchoneÚlen)rF   ÚrowsÚdstÚ	site_nameÚ	new_countÚrrK   rL   rM   Úpub_daterO   ÚeÚtotals                r   Úsync_to_serverrf   p   s™  € ä	Ð
)Ô*ä�?‰?œ7Ó#€DØ�<‰<ÐjÓk×tÑtÓv€DØ‡J�J„LáÜÐ$Ô%Øä
�/‰/Ð+Ó
,€CØ‡K�KÐ)Ô*à*€IØ€IØò #ˆØ12Ñ.ˆˆs�G˜X wð	#Ø�K‰Kð)ð ˜˜gšm¨¨W¨fÐ5°x²~À2Ø’-˜R  #Ð&¨	°2ð7ô	ð × Ñ  1Ò$Ø˜Q‘�	øð#ð �1‚}Ø�
‰
Œà�‰ðQð ˆLô		ð
 	�
‰
Œà�K‰KØ8¸9¸,óHßHPÉË
ÐSTñV€Eà‡I�I„Kä	ˆE�)�˜Aœc $›i˜[Ð(FÀuÀgÈTÐ
RÕSøô# ò 	#Ü�I˜a˜S�/×"Ñ"ûð	#ús   Â?E&Å&	FÅ/FÆFc                 óT  — t        |dz   «      D ]z  }	 t        ||«      \  }}|j                  r|j                  d   n|j                  «       }|j	                  | dd¬«       t        j                  d«       |j                  «       ||fc S  d||fS # t        $ r�}t        |«      }d|v sd|v sd	|v r2t        d
|dd › d�«       t        dd«      \  }}|j                  «       }n9||k  r(t        d|dd › d�«       t        j                  d«       nd||fcY d}~c S Y d}~�Œd}~ww xY w)u>   ç”¨ Playwright é¡µé�¢å®žä¾‹èŽ·å�– HTMLï¼Œæ–­è¿žæ—¶è‡ªåŠ¨é‡�å»ºr   r   Únetworkidlei0u  )Ú
wait_untilÚtimeouté   ÚEPIPEzTarget closedzBrowser closedu     âš¡ æ–­è¿ž(Né<   u   ), é‡�å»ºè¿žæŽ¥...u     âš  é‡�è¯•(z)...é   )Úranger=   r3   Únew_pageÚgotoÚtimeÚsleeprM   r4   rS   r5   )rL   ÚpageÚbrowserÚcontextÚretryÚattemptrd   Úerr_strs           r   Úpw_getrz       s/  € ä˜ ™Ó#ò .ˆð	.ä-¨g°wÓ?ÑˆG�WØ'.§}¢}�7—=‘= Ò#¸'×:JÑ:JÓ:LˆDØ�I‰I�c m¸UˆIÔCÜ�J‰J�qŒMØ—<‘<“> 7¨GÐ3Ò3ð.ð& �˜'Ð!Ð!øô ò 
	.Ü˜!“fˆGØ˜'Ñ! _¸Ñ%?ÐCSÐW^ÑC^Ü˜ g¨c¨r l ^Ð3EÐFÔGÜ#1°$¸Ó#=Ñ �˜Ø×'Ñ'Ó)‘Ø˜5’Ü˜ g¨c¨r l ^°4Ð8Ô9Ü—
‘
˜1•à˜W gÐ-×-ÿùð
	.ús   “A5BÂ	D'ÂA:D"ÄD'Ä"D'c                 óÀ  — | dk(  rt         }n	d| dz
  › d�}t        ||||«      \  }}}|sd||fS g }t        j                  d|t        j                  «      D ]‚  }|j                  d«      j                  «       }|j                  d«      j                  «       }	|j                  d«      j                  «       }
|j                  t        t        |«      |	|
dœ«       Œ„ |||fS )	u1   èŽ·å�–åˆ—è¡¨é¡µï¼Œè¿”å›ž [{'title','url','date'}]r   z>https://sthjj.czs.gov.cn/zwgk/xxgkml/hjpj/jsxmhbspqgs/default_z.htmNz]<li>\s*<a\s+href="(content_\d+\.html)"[^>]*title="([^"]+)"[^>]*>.*?</a>\s*<span[^>]*>([\d-]+)rk   rn   )rL   rK   rN   )
Ú	BASE_LISTrz   ÚreÚfinditerÚDOTALLÚgroupr   Úappendr   ÚDETAIL_BASE)r   Úpw_pageru   rv   rL   ÚresultÚitemsÚmÚhrefrK   rN   s              r   Úfetch_list_pagerˆ   ·   sæ   € à�1‚}Ü‰àNÈxÐZ[É|ÈnÐ\`Ðaˆä% c¨7°G¸WÓEÑ€FˆG�WÙØ�W˜gÐ%Ð%à€Eä�[‰[ØhØ”—	‘	óò ˆð �w‰w�q‹z×ÑÓ!ˆØ—‘˜“
× Ñ Ó"ˆØ�w‰w�q‹z×ÑÓ!ˆØ�‰Üœ;¨Ó-ØØñ
õ 	ðð �'˜7Ð"Ð"r$   c                 óf  ‡— t        | |||«      \  }}}|syd}t        j                  d|t        j                  «      }|r|j	                  d«      j                  «       }|sFt        j                  d|t        j                  «      }|r|j	                  d«      j                  «       }d}t        j                  d|t        j                  «      }	|	r¶|	j	                  d«      j                  «       }
t        j                  dd|
t        j                  t        j                  z  ¬«      }
t        j                  d	d|
t        j                  t        j                  z  ¬«      }
t        j                  d
d|
«      }
|
j                  «       }|�s6t        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  d	d|t        j                  t        j                  z  ¬«      }t        j                  dd|«      }t        j                  dd|«      j                  «       }|j                  d«      }g }d}t        |«      D ]K  \  }Št        ˆfd„dD «       «      rd}|sŒd‰v sd‰v sd‰v r n!|j                  ‰j                  «       «       ŒM |rddj                  |dd «      z   dz   }d}t        j                  d|«      }|r|j	                  d«      }g }t        j                  d|t        j                  «      D ]·  }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|j                  d«      rt        d|dd «      }n>|j                  d«      rt        d|dd «      }n|j                  d «      st        | |«      }|j                  d!|› d"|› d#�«       Œ¹ |r|d$d%j                  |«      z   z  }t        j                  dd|«      }|r(t        j                  d&d'|«      j                  «       dd( n|}|xs d|||| d)œS )*u   æŠ“å�–è¯¦æƒ…é¡µNrX   z<title>(.*?)</title>r   z3<meta[^>]*name="ArticleTitle"[^>]*content="([^"]+)"z$class="xl-xqnr">(.*?)</div>\s*</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z\s+style="[^"]*"z<[^>]+>ú
z\s*\n\s*\n\s*Fc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr!   r#   )Ú.0ÚkwÚlines     €r   ú	<genexpr>zfetch_detail.<locals>.<genexpr>÷   s   øè ø€ Òi "�2˜”:Ñiùs   ƒ)u   é¡¹ç›®å��ç§°u   å»ºè®¾åœ°ç‚¹u   å»ºè®¾å�•ä½�u   å�—ç�†æ—¥æœŸTu	   æ‰«ä¸€æ‰«u   æ‰“å�°æœ¬é¡µu   è®¾ä¸ºé¦–é¡µz<p>z</p><p>é   z</p>u(   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})z+<a[^>]*href="([^"]+\.pdf)"[^>]*>([^<]+)</a>rk   z../../zhttps://sthjj.czs.gov.cn/é   z../Úhttpz	<a href="z" target="_blank">z</a>u&   <br><br><strong>é™„ä»¶ï¼š</strong><br>z<br>z\s+ú iô  )rK   rM   rN   rO   rL   )rz   r}   Úsearchr   r€   r   ÚIÚsubr   Ú	enumerateÚanyr�   Újoinr~   Ú
startswithr   )Ú
detail_urlrƒ   ru   rv   ÚhtmlrK   ÚtmÚatmrM   ÚcmÚcontent_rawÚtextÚlinesÚ
info_linesÚcaptureÚirN   ÚdmÚattachesÚamrL   ÚnamerO   r�   s                          @r   Úfetch_detailr«   Ó   s­  ø€ ä# J°¸À'ÓJÑ€Dˆ'�7ÙØð €EÜ	�‰Ð*¨D´"·)±)Ó	<€BÙ	Ø—‘˜“×!Ñ!Ó#ˆÙÜ�i‰iÐNÐPTÔVX×VZÑVZÓ[ˆÙØ—I‘I˜a“L×&Ñ&Ó(ˆEð €GÜ	�‰Ð:¸DÄ"Ç)Á)Ó	L€BÙ	Ø—h‘h˜q“k×'Ñ'Ó)ˆÜ—f‘fÐ9¸2¸{ÔRT×R[ÑR[Ô\^×\`Ñ\`ÑR`ÔaˆÜ—f‘fÐ7¸¸[ÔPR×PYÑPYÔZ\×Z^ÑZ^ÑP^Ô_ˆÜ—f‘fÐ0°"°kÓBˆØ×#Ñ#Ó%ˆÚä�v‰vÐ2°B¸ÄBÇIÁIÌbÏdÉdÁNÔSˆÜ�v‰vÐ0°"°dÄ"Ç)Á)ÌBÏDÉDÁ.ÔQˆÜ�v‰v�j $¨Ó-ˆÜ�v‰vÐ&¨¨dÓ3×9Ñ9Ó;ˆà—
‘
˜4Ó ˆØˆ
ØˆÜ  Ó'ò 	0‰GˆAˆtÜÓiÐ(hÔiÔiØ�ÚØ $Ñ&¨.¸DÑ*@ÀNÐVZÑDZÙØ×!Ñ! $§*¡*£,Õ/ð	0ñ Ø˜iŸn™n¨Z¸¸¨_Ó=Ñ=ÀÑFˆGð €DÜ	�‰Ð>ÀÓ	E€BÙ	Ø�x‰x˜‹{ˆð €HÜ�k‰kØ6ØŒb�d‰dóò Gˆð �h‰h�q‹k×ÑÓ!ˆØ�x‰x˜‹{× Ñ Ó"ˆà�>‰>˜(Ô#ÜÐ5°s¸1¸2°wÓ?‰CØ�^‰^˜EÔ"ÜÐ5°s¸1¸2°wÓ?‰CØ—‘ Ô'Ü˜* cÓ*ˆCØ�‰˜) C 5Ð(:¸4¸&ÀÐEÕFðGñ ØÐ;¸f¿k¹kÈ(Ó>SÑSÑSˆô �f‰f�Z  WÓ-€GÙ<CŒb�f‰f�V˜S 'Ó*×0Ñ0Ó2°4°CÑ8È€Gð ’˜"ØØØØñð r$   c            	      ó¶  — dd l } | j                  «       }|j                  ddd¬«       |j                  ddd¬«       |j                  dt        dd	¬
«       dd l}t        |j                  «      dkD  r5|j                  d   j                  «       rt        |j                  d   «      nd }|�1t        dt        |«      z   «       |j                  j                  «        |j                  «       }t        «        |j                  rt        «        y t        j                  «       }t!        «       }|j#                  «       }|j$                  j'                  d¬«      }|j)                  ddddœ¬«      }	|	j+                  «       }
	 d}|j,                  rdnd}|j.                  rd}t1        d|
||	«      \  }}}	|€0t        d«       	 |j3                  «        |j5                  d d d «       y t        dt        |«      › d�«       |D ]G  }|j.                  r||j.                  k\  r n*t7        ||
||	«      r|dz  }t        j8                  d«       ŒI |j,                  s|j.                  r¼t;        d|dz   «      D ]ª  }|j.                  r||j.                  k\  r n�t1        ||
||	«      \  }}}	|�t        |«      dk(  r nit        d|› dt        |«      › d�«       |D ]G  }|j.                  r||j.                  k\  r Œ�t7        ||
||	«      r|dz  }t        j8                  d«       ŒI Œ¬ |j3                  «        |j5                  d d d «       t        j                  «       |z
  }t        dd› �«       t        dt<        d   › d t<        d!   › d"t<        d#   › �«       t        d$|d%›d&�«       t<        d   dkD  rt        «        y y # |j3                  «        |j5                  d d d «       w xY w)'Nr   z--fullÚ
store_trueu   å…¨é‡�)ÚactionÚhelpz--syncu	   ä»…å�Œæ­¥z--testu
   æµ‹è¯•Næ�¡)ÚtypeÚdefaultr¯   r   éÿÿÿÿz[AutoPg] max_pages=Tr'   r)   r*   r+   r,   r/   éd   u   âš ï¸� æ— æ³•è®¿é—®ç«™ç‚¹u   ðŸ“ƒ ç¬¬1é¡µ (rZ   rk   u   ðŸ“ƒ ç¬¬u   é¡µ (r‹   z2==================================================u   ðŸ�� æ–°å¢ž:r   u    è·³è¿‡:r   u    é”™è¯¯:r	   u   â�±ï¸� z.0fÚs)ÚargparseÚArgumentParserÚadd_argumentr   Úsysr]   ÚargvÚisdigitr5   rS   ÚpopÚ
parse_argsrG   Úsyncrf   rr   r   r6   r7   r8   r9   rp   ÚfullÚtestrˆ   rE   Ú__exit__Ú_process_itemrs   ro   rJ   )rµ   ÚparserÚ_SYS2Ú_MAX_PGÚargsÚ
start_timer<   r:   ru   rv   rt   Ú	total_newÚ	max_pagesr…   Úitemr   Úelapseds                    r   ÚmainrË   &  sw  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜¨¸HÐÔEØ
×Ñ˜¨¸KÐÔHØ
×Ñ˜¤s°A¸LÐÔIãÜ%(¨¯©£_°qÒ%8¸U¿Z¹ZÈ¹^×=SÑ=SÔ=UŒc�%—*‘*˜R‘.Ô!Ð[_€GØÐÜÐ#¤c¨'£lÑ2Ô3Ø�
‰
�‰ÔØ×ÑÓ€Dä„Ià‡y‚yÜÔØä—‘“€JÜ	Ó	€BØ—,‘,“.€KØ×"Ñ"×)Ñ)°4Ð)Ó8€GØ×!Ñ!ð EØ¨4Ñ0ð "ó €Gð ×ÑÓ€Dð&&Øˆ	ØŸ9š9‘C¨!ˆ	Ø�9Š9ØˆIô #2°!°T¸7ÀGÓ"LÑˆˆw˜Øˆ=ÜÐ-Ô.Øð6 	�‰ŒØ
�‰�D˜$ Õ%ô7 	�œs 5›z˜l¨$Ð/Ô0àò 	ˆDØ�yŠy˜Y¨$¯)©)Ò3ÙÜ˜T 4¨°'Ô:Ø˜Q‘�	Ü�J‰J�q�Mð	ð �9Š9˜Ÿ	š	Ü! ! Y°¡]Ó3ò "�Ø—9’9 ¨d¯i©iÒ!7ÙÜ*9¸(ÀDÈ'ÐSZÓ*[Ñ'��w Ø�=¤C¨£J°!¢OÙÜ˜  
¨%´°E³
¨|¸4Ð@ÔAØ!ò "�DØ—y’y Y°$·)±)Ò%;ÙÜ$ T¨4°¸'ÔBØ! Q™˜	Ü—J‘J˜q•Mñ"ð"ð 	�‰ŒØ
�‰�D˜$ Ô%ä�i‰i‹k˜JÑ&€GÜ	ˆBˆvˆhˆ-ÔÜ	ˆLœ˜u™˜ h¬u°V©}¨o¸XÄeÈHÁoÐEVÐ
WÔXÜ	ˆG�G˜C�= Ð
"Ô#äˆU�|�aÒÜÕð øð 	�‰ŒØ
�‰�D˜$ Õ%ús   Å>?N3 Ç"D8N3 Î3%Oc           	      ó4  — t        j                  t        «      }|j                  d| d   f«      j	                  «       }|j                  «        |rt        dxx   dz  cc<   yt        d| d   d d › d	�d
d¬«       t        | d   |||«      }|€t        d«       t        dxx   dz  cc<   yt        |d   xs | d   | d   |d   |j                  d«      xs | j                  dd
«      |d   «       t        |j                  dd
«      «      }t        d|› d�«       y)Nz'SELECT 1 FROM crawl_results WHERE url=?rL   r   r   Fu     ðŸ“„ rK   é(   z...rX   T)ÚendÚflushu    âœ— è¯¦æƒ…å¤±è´¥r	   rM   rN   rO   u    âœ… ÚB)r@   rA   rB   rC   r\   rE   rJ   r5   r«   rP   Úgetr]   )rÉ   rt   ru   rv   rF   r   ÚdetailÚclens           r   rÁ   rÁ   t  s  € Ü�?‰?œ7Ó#€DØ�\‰\ÐCÀdÈ5ÁkÀ^ÓT×]Ñ]Ó_€FØ‡J�J„LÙÜˆf‹˜Ñ‹Øä	ˆG�D˜‘M # 2Ð&Ð' sÐ
+°¸4Õ@Ü˜$˜u™+ t¨W°gÓ>€Fà€~ÜÐ!Ô"Üˆh‹˜1Ñ‹ØäØˆw‰Ò(˜4 ™=ØˆU‰ØˆyÑØ�
‰
�6ÓÒ2˜dŸh™h v¨rÓ2ØˆyÑôô ˆv�z‰z˜) RÓ(Ó)€DÜ	ˆE�$��qˆ/ÔØr$   Ú__main__)NN)rk   )*Ú__doc__r   r}   r¸   rr   Újsonr@   Ú
subprocessÚsslÚurllib.parser   Úplaywright.sync_apir   r   ÚdirnameÚabspathÚ__file__ÚBASE_DIRrš   rB   Ú	SITE_NAMEÚDOMAINÚ
SERVER_SSHÚSERVER_SEARCH_DBr|   r‚   r   rJ   r   r   r%   r=   rG   rP   rV   rf   rz   rˆ   r«   rË   rÁ   Ú__name__r#   r$   r   ú<module>rä      sí   ðñ÷  9× 8× 8× 8Ý  Ý /à�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨8Ó4Ó5€Ø
�'‰'�,‰,�xÐ!6Ó
7€Ø&€	Ø	€Ø €
Ø$Ð àO€	ØF€à—'‘'—,‘,˜xÐ):Ó;€Ø˜1¨Ñ*€ò%ò
	ò#ó$ò$ò ò&1ò.Tó`"ò.#ò8QòfLó\ð8 ˆzÒÙ…Fð r$   