Ë
    Ž…yj‹$  ã                   ób  — 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mZ ddl	m
Z
 ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ dZedz   ZdZd	Zd
ZdZd„ Zd„ Zd„ Zedk(  r ej8                   e«       «       yy)u(  
èŽ†ç”°å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-å…¬ç¤ºå…¬å‘Š çˆ¬è™« (avalon åŠ¨æ€�åˆ—è¡¨, playwright æ¸²æŸ“)
åˆ—è¡¨: https://sthjj.putian.gov.cn/xxgk/gsgg/ (avalon ms-controller, é�™æ€�é¡µä»…ç¬¬ä¸€æ�¡)
åˆ†é¡µ: ç‚¹å‡»ä¸‹ä¸€é¡µæŒ‰é’® / pgBar_form æ¨¡æ�¿
è¯¦æƒ…: TRS é�™æ€�é¡µ t20YYYYMMDD_ID.htm, div.view/content å®¹å™¨
é    N)Úurljoin)ÚBeautifulSoup)Úpush_to_searchdbzhttps://sthjj.putian.gov.cnz/xxgk/gsgg/u%   èŽ†ç”°å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-å…¬ç¤ºå…¬å‘Šé<   z
2015-01-01zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                  óÎ   — t         j                  dd  D ]O  } | j                  d«      rt        | j	                  d«      d   «      c S | j                  «       sŒDt        | «      c S  y )Né   z--pages=ú=)ÚsysÚargvÚ
startswithÚintÚsplitÚisdigit)Úas    ú&/root/gov_crawler/crawl_putian_gsgg.pyÚparse_pages_argr      sU   € Ü�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#Ü�q—w‘w˜s“| A‘Ó'Ò'Ø�9‰9�;Ü�q“6ŠMð	ð
 ó    c                 óÞ   — dd l }|j                  | xs d«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } | j	                  «       S )Nr   Ú z&middot;|&nbsp;z[\u200b\ufeff]u   ^[â€¢Â·]\s*)ÚhtmlÚunescapeÚreÚsubÚstrip)ÚtitleÚhtml_mods     r   Úclean_titler      s]   € ÛØ×Ñ˜ešk rÓ*€EÜ�F‰FÐ% r¨5Ó1€EÜ�F‰FÐ$ b¨%Ó0€EÜ�F‰F�> 2 uÓ-€EØ�;‰;‹=Ðr   c               ƒ   ó  K  — t        «       } | €t        } t        d| › dt        › d�«       ddlm} g }t        «       } |«       4 ƒd {  –—† }|j                  j                  dddg¬	«      ƒ d {  –—† }|j                  t        d
¬«      ƒ d {  –—† }|j                  «       ƒ d {  –—† }t        d| dz   «      D �]f  }|dk(  r!|j                  t        dd¬«      ƒ d {  –—†  n0	 |j                  d|«      ƒ d {  –—† }	|	st        d|› d�«        �n	 |j#                  d«      ƒ d {  –—†  |j                  d«      ƒ d {  –—† }|D �cg c]  }|d   |vsŒ|‘Œ }}|D ]  }|j%                  |d   «       Œ |j'                  |«       t        d|› dt)        |«      › dt)        |«      › dt)        |«      › �«       |r@|D �cg c]  }|d   sŒ	|d   ‘Œ }}|r&t+        |«      t,        k  rt        dt,        › �«        n'|st        d«        nt/        j0                  d«       �Œi t        dt)        |«      › d�«       g }t3        |«      D �]×  \  }}	 |j                  |d   dd¬«      ƒ d {  –—†  |j#                  d«      ƒ d {  –—†  |j5                  «       ƒ d {  –—† }t9        |d&«      }d#}|j;                  d'«      }|rt=        |j?                  d¬(«      «      }|sAtA        jB                  d)|t@        jD                  «      }|rt=        |jG                  d«      «      }|s@|j;                  d"«      }|r-t=        |j?                  d¬(«      jI                  d*«      d   «      }d#}tA        jB                  d+|t@        jD                  «      }|r|jG                  d«      }|s5d,D ]0  }tA        jB                  d-|z  |«      }|sŒ|jG                  d«      } n d }d.D ]*  }|jK                  |«      }|sŒ|j?                  d¬(«      sŒ* n d#}g }|�rˆ|jM                  d/d¬0«      D ]—  }|d1   jO                  «       }tA        jB                  d2|jQ                  «       «      sd3|jQ                  «       v sŒMtS        |d   |«      } |j?                  d¬(«      xs |jI                  d4«      d5   }!|j7                  |!| d6œ«       Œ™ g }"|jM                  g d7¢«      D �]o  }#|#jT                  d8k(  ré|#jW                  d9«      s"|#j;                  d9«      s|#j;                  d8«      rŒG|#jM                  d/d¬0«      D ]^  }|d1   jO                  «       }tA        jB                  d2|jQ                  «       «      sd3|jQ                  «       v sŒMtS        |d   |«      |d1<   Œ` tA        jX                  d:d;|#j?                  d;d¬(«      «      }$|$sŒæ|"j7                  d<|$› d=�«       Œü|#jT                  d9k(  r|"j7                  t[        |#«      «       �Œ'|#jT                  d>k(  s�Œ8|#j]                  d?d#«      }%|%s�ŒN|"j7                  d@tS        |d   |%«      › dA�«       �Œr |D ]   }&|"j7                  dB|&d   › dC|&dD   › dE�«       Œ" dFj_                  |"«      }|s|j?                  d;d¬(«      }$|$rd<|$› d=�}|s|d"   }|s|d   }|j7                  t        ||||d   |d   d$|rta        jb                  |dG¬H«      nd#d%œ«       |dz   dIz  dk(  r#t        dJ|dz   › d4t)        |«      › dK|d dL › �«       t/        j0                  dM«       �ŒÚ |je                  «       ƒ d {  –—†  d d d «      ƒd {  –—†  tg        t        ¬N«       |D �'cg c]  }'|'dO   sŒ	|'dO   ‘Œ }}'t        dPt        › dQt)        |«      › dR|rt+        |«      ndS› dT|rti        |«      ndS› �«       y 7 �Œl7 �ŒH7 �Œ,7 �Œ7 �Œâ7 �ŒÉ# t         $ r}
t        d|› d|
› �«       Y d }
~
 �ŒÃd }
~
ww xY w7 �ŒÇ7 �Œ±c c}w c c}w 7 �Œ”7 �Œ~7 �Œi# t         $ rL}
t        d |d   d d! › d|
› �«       |j7                  t        |d"   |d   d#|d   |d   d$d#d%œ«       Y d }
~
�Œd }
~
ww xY w7 �Œ)7 �Œ# 1 ƒd {  –—†7  sw Y   �Œ-xY wc c}'w ­w)UNz[AutoPg] max_pages=z (SITE=ú)r   )Úasync_playwrightTz---disable-blink-features=AutomationControlledz--no-sandbox)ÚheadlessÚargszzh-CN)Ú
user_agentÚlocaler   ÚdomcontentloadediÈ¯  )Ú
wait_untilÚtimeoutaP  (pg) => {
                        const links = document.querySelectorAll('.pgStyle_green a[href="#"]');
                        for (const a of links) {
                            if (a.textContent.trim() === String(pg)) { a.click(); return true; }
                        }
                        return false;
                    }z  Page u   : æ— æ•°å­—æŒ‰é’®, å�œæ­¢u   : ç¿»é¡µå¤±è´¥ i¸  aO  () => {
                const out = [];
                const links = document.querySelectorAll('a[href*="t20"], a[href*="t19"], a[href*="t18"]');
                const seen = new Set();
                links.forEach(a => {
                    const href = a.href.split('?')[0];
                    if (!seen.has(href) && a.textContent.trim().length > 4) {
                        seen.add(href);
                        let li = a.closest('li');
                        let date = '';
                        if (li) {
                            const sp = li.querySelector('span.rt, span.date, span.time');
                            if (sp) date = sp.textContent.trim();
                        }
                        if (!date) {
                            const m = href.match(/t(\d{8})_/);
                            if (m) { const d = m[1]; date = d.slice(0,4)+'-'+d.slice(4,6)+'-'+d.slice(6,8); }
                        }
                        out.push({url: href, title: a.textContent.trim(), date});
                    }
                });
                return out;
            }Úurlz: u   æ�¡(æ–°u   ) ç´¯è®¡Údateu     å·²è¾¾ CUTOFF u     æ— æ–°å¢ž, å�œæ­¢u   
å…± u    æ�¡, æŠ“è¯¦æƒ…...iÐ  z  [WARN] detail é2   r   r   u   å…¬ç¤ºå…¬å‘Š)Ú	site_namer   Úpub_dateÚcontentÚ
source_urlr(   ÚcategoryÚattachmentszhtml.parserÚh1)r   zE<meta[^>]*name=["\']ArticleTitle["\'][^>]*content=["\']([^"\']*)["\']Ú_zE<meta[^>]*name=["\']PubDate["\'][^>]*content=["\'](\d{4}-\d{2}-\d{2}))u   å�‘å¸ƒæ—¶é—´u   å�‘å¸ƒæ—¥æœŸu   %s[ï¼š:]\s*(\d{4}-\d{2}-\d{2}))zdiv.viewzdiv.contentz#zoomzdiv.articlezdiv.xl_textr   )Úhrefr3   z&\.(pdf|doc|docx|xls|xlsx|zip|rar|wps)$Údownloadú/éÿÿÿÿ)Únamer(   )ÚpÚtableÚimgr8   r9   z\s+ú z<p>z</p>r:   Úsrcz<p><img src="z"></p>z<p><a href="z">r7   z</a></p>ú
F)Úensure_asciié   z  [z] é(   gš™™™™™Ù?)Úbatch_labelr,   u	   
ç«™ç‚¹: u	    é‡‡é›†: u	    æ—¥æœŸ: ú-z ~ )5r   Ú	MAX_PAGESÚprintÚ	SITE_NAMEÚplaywright.async_apir    ÚsetÚchromiumÚlaunchÚnew_contextÚUAÚnew_pageÚrangeÚgotoÚLIST_URLÚevaluateÚ	ExceptionÚwait_for_timeoutÚaddÚextendÚlenÚminÚCUTOFFÚtimeÚsleepÚ	enumerater-   Úappendr   Úfindr   Úget_textr   ÚsearchÚIÚgroupr   Ú
select_oneÚfind_allr   Úlowerr   r7   Úfind_parentr   ÚstrÚgetÚjoinÚjsonÚdumpsÚcloser   Úmax)(Ú	max_pagesr    Ú	all_itemsÚseenr8   ÚbrowserÚctxÚpageÚpgÚclickedÚeÚitemsÚxÚ	new_itemsÚdatesÚresultsÚiÚitemr   Úsoupr   r1   ÚmÚtr)   ÚkwÚbody_elÚselr-   r0   r   r3   Úfullr7   ÚpartsÚelÚtxtr<   ÚattÚrs(                                           r   Úmainrˆ   &   s»  è ø€ ÜÓ!€IØÐÜˆ	Ü	Ð 	˜{¨'´)°¸AÐ
>Ô?å5Ø€IÜ‹5€DáÓ!÷ Yð Y QØŸ
™
×)Ñ)°4Ð?nÐp~Ð>Ð)ó  A÷  AˆØ×'Ñ'´2¸gÐ'ÓF×FˆØ—\‘\“^×#ˆä˜˜9 q™=Ó)ó :	ˆBØ�QŠwØ—i‘i¤Ð5GÐQV�iÓW×WÑWðØ$(§M¡Mð 3ð ó%÷ �Gñ #Ü ¨ tÐ+DÐEÔFÚð #ð ×'Ñ'¨Ó-×-Ð-àŸ-™-ð )ó ÷ ˆEð. %*ÖB˜q¨Q¨u©X¸TÒ-AšÐBˆIÐBØò #�Ø—‘˜˜5™Õ"ð#à×Ñ˜YÔ'Ü�G˜B˜4˜r¤# e£* ¨W´S¸³^Ð4DÀHÌSÐQZË^ÐL\Ð]Ô^ÙØ,5ÖC q¸¸6»˜˜6›ÐC�ÐCÙœS ›Z¬&Ò0ÜÐ,¬V¨HÐ5Ô6ÙÙäÐ+Ô,ÙÜ�J‰J�qŽMðu:	ôx 	�”s˜9“~Ð&Ð&8Ð9Ô:ØˆÜ  Ó+ó T	‰GˆAˆtðØ—i‘i  U¡Ð8JÐTY�iÓZ×ZÐZØ×+Ñ+¨DÓ1×1Ð1Ø!Ÿ\™\›^×+�ô !  }Ó5ˆDØˆEØ—‘˜4“ˆBÙÜ# B§K¡K°d KÓ$;Ó<�ÙÜ—I‘IÐfÐhlÔnp×nrÑnrÓs�ÙÜ'¨¯©°«
Ó3�EÙØ—I‘I˜gÓ&�ÙÜ'¨¯
©
¸¨
Ó(>×(DÑ(DÀSÓ(IÈ!Ñ(LÓM�EàˆDÜ—	‘	ÐbÐdhÔjl×jnÑjnÓoˆAÙØ—w‘w˜q“z�ÙØ:ò �BÜŸ	™	Ð"CÀbÑ"HÈ$ÓO�AÚØ Ÿw™w q›z˜Ùð	ð ˆGØYò �ØŸ/™/¨#Ó.�Ú˜w×/Ñ/°dÐ/Õ;Ùðð ˆGØˆKÚØ ×)Ñ)¨#°DÐ)Ó9ò H�AØ˜V™9Ÿ?™?Ó,�DÜ—y‘yÐ!JÈDÏJÉJËLÔYÐ]gÐko×kuÑkuÓkwÒ]wÜ& t¨E¡{°DÓ9˜Ø Ÿz™z°˜zÓ5ÒL¸¿¹ÀC»ÈÑ9L˜Ø#×*Ñ*°DÀÑ+FÕGðHð �Ø!×*Ñ*Ò+@ÓAó \�BØ—w‘w #’~ØŸ>™>¨'Ô2°b·g±g¸gÔ6FÈ"Ï'É'ÐRUÌ,Ø$Ø!#§¡¨S°t Ó!<ò G˜AØ#$ V¡9§?¡?Ó#4˜DÜ!Ÿy™yÐ)RÐTX×T^ÑT^ÓT`ÔaÐeoÐsw×s}Ñs}ÓsÒeÜ,3°D¸±KÀÓ,F  &¢	ðGô !Ÿf™f V¨S°"·+±+¸cÈ°+Ó2NÓO˜ÚØ!ŸL™L¨3¨s¨e°4¨Õ9ØŸ™ GÒ+ØŸ™¤S¨£WÖ-ØŸ™ EÔ)Ø Ÿf™f U¨BÓ/˜ÛØ!ŸL™L¨=¼ÀÀeÁÈcÓ9RÐ8SÐSYÐ)ZÖ[ð!\ð" 'ò U�CØ—L‘L <°°E±
¨|¸2¸cÀ&¹k¸]È(Ð!SÕTðUàŸ)™) EÓ*�ÙØ!×*Ñ*¨3°dÐ*Ó;�CÙØ$'¨ u¨D /˜áØ˜W™�ÙØ˜F‘|�Ø�N‰N¬¸UÐPTÐahØ*.¨u©+¸dÀ5¹kÐWeÙZe¬4¯:©:°kÐPUÕ+VÐkmñoô pð �A‘˜‰|˜qÒ Ü˜˜A˜a™C˜5 ¤# i£.Ð!1°°E¸#¸2°J°<Ð@ÔAÜ�J‰J�sŽOðiT	ðl �m‰m‹o×Ð÷sY÷ Yôv �W¬)Õ4Ø$+Ö=˜q¨q°«}ˆQˆz‹]Ð=€EÐ=Ü	ˆJ”y�k ¬3¨w«<¨.¸	ÑPUÄ#ÀeÄ*Ð[^ÐA_Ð_bÑqvÔcfÐglÔcmÐ|ð  cAð  Bõ  Cð{Yùð AùØFùØ#ùð Xùðúô !ò Ü˜G B 4 °q°cÐ:Ô;Þûðúð .ùðûò. Cùò Dð [ùØ1ùØ+úÜò ÜÐ(¨¨e©°S°bÐ)9Ð(:¸"¸Q¸CÐ@ÔAØ—‘¬YÀÀgÁÐ\`ÐagÑ\hÐuwð  HLð  MRñ  HSð  \`ð  afñ  \gð  uCð  TVñ   Wô  XÝûðúðb 	ùðsYù÷ Y÷ Yò Yüòx >ùsË  ‚AbÁ^4Á	bÁ#a&Á/^7Á0a&Â^:Âa&Â&^=Â'7a&Ã_ Ãa&Ã%_Ã:_Ã;_Äa&Ä(_/Ä)a&Å_2Åa&Å
_5Å_5ÅA&a&Ç
_:Ç_:ÇA=a&É`É+_?É,`Ê`Ê`Ê`Ê`Ê!Da&Î?.a&Ï.a&ÐA)a&Ñ+Da&Õ4>a&Ö3Aa&Øa&ØDa&Ü7a Ü8a&Ü<bÝa#ÝbÝ!
a<Ý,a<Ý3AbÞ7a&Þ:a&Þ=a&ß a&ß_ß	_,ß_'ß a&ß'_,ß,a&ß2a&ß5
a&ß?`à`à`à	aàAaáa&áaáa&á#bá&a9á,a/á-a9á4bÚ__main__)Ú__doc__Úosr
   r   rX   rh   ÚasyncioÚurllib.parser   Úbs4r   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   ÚBASE_URLrO   rE   rC   rW   rK   r   r   rˆ   Ú__name__Úrun© r   r   ú<module>r™      sž   ðñ÷ (× '× 'Ý  Ý à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à(€Ø�mÑ#€Ø3€	Ø€	Ø	€Øv€òòògCðR ˆzÒØ€G‡K�K‘“Õð r   