Ë
    n}j�  ã                   óÜ   — 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m	Z	 ddl
mZ ddlZddlZdZdZ ej                   dd«      Z e	d	d
d«      ZdZd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uA   
é�–è¿œåŽ¿äººæ°‘æ”¿åºœ - å…¬å‘Šå…¬ç¤º çˆ¬è™« (Chrome CDP ç¿»é¡µ)
é    N)ÚdatetimeÚdate)ÚBeautifulSoupz>/root/.cache/ms-playwright/chromium-1228/chrome-linux64/chromeu"   é�–è¿œåŽ¿äººæ°‘æ”¿åºœ-å…¬å‘Šå…¬ç¤ºÚ	SEARCH_DBz/root/search.dbiç  é   é   zhttps://www.jingyuan.gov.cnc                  ó&  ‡‡— d} t        j                  t        ddddd| › �dt        › d�gt         j                  t         j                  i ¬	«      }t        j                  d
«       	 t        j                  j                  d| › d�«      }t        j                  |j                  «       «      }|d   d   }t        j                  |d¬«      ŠdŠd%ˆˆfd„	}d&ˆfd„	} |d«       t        j                  d«       d} |d|ddddœ«      }d }	dd l}
t        j
                  «       dz   }t        j
                  «       |k  rt|
j                  ‰j                   gg g d«      d   r:t        j                  ‰j#                  «       «      }|j%                  d«      |k(  r|}	nt        j
                  «       |k  rŒt‰j'                  «        |	�rdt)        |	j%                  di «      «      v rUt+        d|	d   j%                  di «      j%                  d d!«      › �«       g |j-                  «        |j/                  d¬«       S |	j%                  di «      j%                  di «      j%                  d"d#«      }t1        |t(        «      r7t        j                  |«      |j-                  «        |j/                  d¬«       S |xs g 	 |j-                  «        |j/                  d¬«       S g |j-                  «        |j/                  d¬«       S #  Y S xY w#  Y S xY w#  Y S xY w#  Y S xY w# t2        $ rC}t+        d$|› �«       g cY d }~|j-                  «        |j/                  d¬«       S #  Y S xY wd }~ww xY w# |j-                  «        |j/                  d¬«       w #  Y w xY wxY w)'Ni$  z
--headlessz--no-sandboxz--disable-gpuz--disable-dev-shm-usagez--remote-debugging-port=z--remote-allow-origins=*z/xwzx/gggs/index.html)ÚstdoutÚstderrÚenvé   zhttp://127.0.0.1:z/jsonr   ÚwebSocketDebuggerUrlé   )Útimeoutr   c                 óx   •— ‰| dœ}|r||d<   ‰j                  t        j                  |«      «       ‰dz  Š‰dz
  S )N)ÚidÚmethodÚparamsr   )ÚsendÚjsonÚdumps)r   r   ÚcmdÚnext_idÚwss      €€ú#/root/gov_crawler/crawl_jingyuan.pyr   z"collect_all_articles.<locals>.send#   s?   ø€ à ¨FÑ3ˆCÙ v�s˜8‘}Ø�G‰G”D—J‘J˜s“OÔ$Ø�q‰LˆGØ˜Q‘;Ðó    c                 óV  •— ddl }t        j                  «       |dz  z   }t        j                  «       |k  rs|j                  ‰j                  gg g d«      d   r9t        j                  ‰j                  «       «      }|j                  d«      | k(  r|S t        j                  «       |k  rŒsy)z;Wait for specific command result, skipping console messagesr   Niè  g      à?r   )ÚselectÚtimeÚsockr   ÚloadsÚrecvÚget)Úcmd_idÚ
timeout_msr   ÚdeadlineÚmsgr   s        €r   Úwait_resultz)collect_all_articles.<locals>.wait_result+   s„   ø€ ãÜ—y‘y“{ Z°$Ñ%6Ñ6ˆHÜ—)‘)“+ Ò(Ø—=‘= "§'¡' ¨B°°CÓ8¸Ò;ÜŸ*™* R§W¡W£YÓ/�CØ—w‘w˜t“}¨Ò.Ø"˜
ô	 —)‘)“+ Ó(ð
 r   zRuntime.enableé   a1  
(async () => {
    const sleep = ms => new Promise(r => setTimeout(r, ms));
    let all = [];
    for (let page = 1; page <= 35; page++) {
        await sleep(1500);
        const items = Array.from(document.querySelectorAll('.u-lst-bor li')).map(li => {
            const a = li.querySelector('a');
            const span = li.querySelector('span');
            return {
                href: a ? a.getAttribute('href') : '',
                title: a ? a.textContent.trim().replace(/^-/, '') : '',
                date: span ? span.textContent.trim() : ''
            };
        });
        if (items.length === 0) break;
        all = all.concat(items);
        const lastD = items[items.length-1].date;
        if (lastD < '2023-06-01') break;
        const nxt = document.querySelector('.layui-laypage-next');
        if (!nxt || nxt.classList.contains('layui-disabled')) break;
        nxt.click();
    }
    // Dedup
    const seen = new Set();
    return JSON.stringify(all.filter(x => { if (seen.has(x.href)) return false; seen.add(x.href); return true; }));
})()
zRuntime.evaluateTi`ê  )Ú
expressionÚawaitPromiseÚreturnByValuer   é<   r   ÚexceptionDetailsÚresultz
JS error: ÚtextÚ Úvaluez[]zCDP error: )N)i'  )Ú
subprocessÚPopenÚCHROMEÚBASEÚDEVNULLr   ÚsleepÚurllibÚrequestÚurlopenr   r!   ÚreadÚ	websocketÚcreate_connectionr   r    r"   r#   ÚcloseÚstrÚprintÚkillÚwaitÚ
isinstanceÚ	Exception)ÚportÚprocÚrespÚtargetsÚws_urlr   r(   ÚscriptÚcidr/   r   r&   r'   ÚvalÚer   r   s                  @@r   Úcollect_all_articlesrO      s  ù€ Ø€DÜ×ÑÜ	�˜~¨Ø	"Ð&>¸t¸fÐ$EØ	#¬ vÐ-BÐ%Cð	Eô ×!Ñ!¬*×*<Ñ*<À"ô	€Dô 	‡J�Jˆq„Mð]Ü�~‰~×%Ñ%Ð(9¸$¸¸uÐ&EÓFˆÜ—*‘*˜TŸY™Y›[Ó)ˆØ˜‘Ð2Ñ3ˆä×(Ñ(¨¸Ô<ˆØˆö	õ		ñ 	ÐÔÜ�
‰
�1Œðˆñ8 Ð%Ø Ø Ø!Øñ	(
ó ˆð ˆÛÜ—9‘9“; Ñ#ˆÜ�i‰i‹k˜HÒ$Ø�}‰}˜bŸg™g˜Y¨¨B°Ó2°1Ò5Ü—j‘j §¡£Ó+�Ø—7‘7˜4“= CÒ'Ø �FØô �i‰i‹k˜HÓ$ð 	�‰Œ
âØ!¤S¨¯©°H¸RÓ)@Ó%AÑAÜ˜
 6¨(Ñ#3×#7Ñ#7Ð8JÈ2Ó#N×#RÑ#RÐSYÐZ\Ó#]Ð"^Ð_Ô`Øð 	�	‰	ŒØ�Y‰Y˜qˆYÕ!ð —*‘*˜X bÓ)×-Ñ-¨h°rÓ:×>Ñ>¸wÀtÓLˆCÜ˜#œsÔ#Ü—z‘z #“ð 	�	‰	ŒØ�Y‰Y˜qˆYÕ!ð ’9˜"Ðð 	�	‰	ŒØ�Y‰Y˜qˆYÕ!ð ð
 	�	‰	ŒØ�Y‰Y˜qˆYÕ!øØ‘ûˆ‘ûˆ‘ûˆ‘ûô ò Ü�˜A˜3ÐÔ ØŒ	à�	‰	ŒØ�Y‰Y˜qˆYÕ!øØ‘þðûð 	�	‰	ŒØ�Y‰Y˜qˆYÕ!øØ‘ýsŸ   Á&EL Æ/A"L È!K:È4AL ÊLÊ-L ËLËL Ë'LË:K>ÌLÌLÌLÌ	M"ÌMÌ.M"Ì/M% ÍMÍMÍM"Í"M% Í%NÍ6N	ÎNÎ	NÎNc                 óˆ  — 	 t        j                  | ddidd¬«      }d|_        t        |j                  d«      }|j                  d¬	«      }|rn|j                  d
«      }|j                  d«      D ]  }|j                  |«       Œ t        |«      }t        |j                  d¬«      «      dkD  r|S t        |«      S y#  Y yxY w)Nú
User-AgentúMozilla/5.0é   F)Úheadersr   Úverifyzutf-8ÚlxmlÚprintContent)r   ÚdivÚpT©Ústripé2   r1   )Úrequestsr#   Úencodingr   r0   ÚfindÚnew_tagÚfind_allÚappendr@   ÚlenÚget_text)ÚurlÚrÚsoupÚpcÚdrY   Úhtmls          r   Úfetch_detailrk   z   s¸   € ðÜ�L‰L˜ |°]Ð&CÈRÐX]Ô^ˆØˆŒ
Ü˜QŸV™V VÓ,ˆØ�Y‰Y˜.ˆYÓ)ˆÙØ—‘˜UÓ#ˆAØ—[‘[ Ó%ò �Ø—‘˜•ðä�q“6ˆDÜ˜qŸz™z°˜zÓ5Ó6¸Ò;�4ÐHÄÀRÃÐHØøðÙús   ‚B.B= Â1
B= Â=Cc                  ón  — t        d«       t        «       } t        dt        | «      › �«       | st        d«       t        «       } | �rå| D �cg c]&  }|j	                  d«      sŒ|j	                  dd«      ‘Œ( }}|r#t        dt        |«      › dt        |«      › �«       | D �cg c]D  }|j	                  d«      sŒt        j                  |d   d«      j                  «       t        k\  r|‘ŒF }}t        d	t        |«      › �«       t        j                  t        «      }|j                  «       }d
x}}t        |«      D ]¼  \  }}|d   j!                  d«      r|d   nt"        |d   z   }	|j%                  d|	f«       |j'                  «       rŒOt)        |	«      }
|
s|dz  }|j%                  dt*        |	|	|d   |d   |
|d   f«       |dz  }|dz   dz  d
k(  sŒ˜|j-                  «        t/        j0                  d«       Œ¾ |j-                  «        |j3                  «        t        d|› d|› �«       y y c c}w c c}w )Nz1Step 1: Collecting all articles via Chrome CDP...z
Total collected: z%Fallback: API only (1 page, 20 items)r   r1   zRange: z ~ z%Y-%m-%dzAfter filter: r   ÚhrefÚhttpz(SELECT 1 FROM gov_raw WHERE page_url = ?r   z£INSERT OR IGNORE INTO gov_raw
                (site_name, source_url, page_url, title, publish_date, content, summary)
                VALUES (?, ?, ?, ?, ?, ?, ?)Útitleé
   gš™™™™™É?z
Done! Added: z, NoContent: )rA   rO   rc   Úapi_fallbackr#   ÚminÚmaxr   Ústrptimer   ÚCUTOFF_DATEÚsqlite3ÚconnectÚDB_PATHÚcursorÚ	enumerateÚ
startswithr6   ÚexecuteÚfetchonerk   Ú	SITE_NAMEÚcommitr   r8   r?   )ÚitemsÚiÚdatesÚitÚfilteredÚconnÚcÚaddedÚ
no_contentre   Úcontents              r   ÚmainrŠ   Š   s	  € Ü	Ð
=Ô>Ü Ó"€EÜ	Ð¤ E£
˜|Ð
,Ô-áÜÐ5Ô6Ü“ˆâØ+0ÖB a°A·E±E¸&µM�—‘�v˜bÕ!ÐBˆÐBÙ”%˜'¤# e£* ¨S´°U³°Ð=Ô>à!&ö U˜2¨"¯&©&°­.Ü×%Ñ% b¨¡j°*Ó=×BÑBÓDÌÒSò ð Uˆð Uä�œs 8›}˜oÐ.Ô/ä�‰œwÓ'ˆØ�K‰K‹MˆØÐˆ�
Ü˜xÓ(ò 	 ‰EˆAˆrØ " 6¡
× 5Ñ 5°fÔ =�"�V’*Ä4È"ÈVÉ*ÑCTˆCØ�I‰IÐ@À3À&ÔIØ�z‰zŒ|˜XÜ" 3Ó'ˆGÙ˜J¨!™O˜JØ�I‰Ið 0ô ˜C  b¨¡k°2°f±:¸wÈÈ7ÉÐTôVð �Q‰JˆEØ�!‘�r‰z˜Q‹Ø—‘”Ü—
‘
˜3•ð	 ð 	�‰Œ�t—z‘z”|Ü� ˜w m°J°<Ð@ÕAð5 ùÚBùòUs   ÁH-Á"H-Â!H2Â82H2c            	      ó^  — ddddddddd	œ} t        j                  t        › d
�| ddidd¬«      }|j                  «       }|j                  di «      j                  dd«      }t	        |d«      }g }|j                  d«      D ]ª  }|j                  d«      }|j                  d«      }|sŒ(|sŒ+|j                  dd«      }	|	r|	j                  d«      s	t        |	z   }	|j                  |	|j                  d¬«      j                  d«      j                  «       |j                  d¬«      dœ«       Œ¬ |S )NÚbulidstaticÚ a56204ae810e47f3980d37aaecd6be5eÚ 5004e1c65f564ef99a4d2646c2f2b1e5Úcolumnu
   Ajaxåˆ†é¡µÚ 58fb923cd15b4bd3bea25ab66c8dd656Ú1Ú20)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚpageIdÚpageNoÚpageSizez7/api-gateway/jpaas-publish-server/front/page/build/unitrQ   rR   r   F)r   rT   r   rU   Údatarj   r1   rV   z.u-lst-bor liÚaÚspanrm   rn   TrZ   ú-)rm   ro   r   )r]   r#   r6   r   r   r   r_   r{   rb   rd   Úlstripr[   )
r   rf   ri   Úhrg   r€   Úlirœ   r�   rm   s
             r   rq   rq   ¯   s,  € à"Ð-OØ6ÀHØÐ)KØ 4ñ	€Fô 	�‰œ�vÐTÐUØ ¨mÐ<ÀbÐQVô	X€Aà	�‰‹€AØ	�‰ˆf�bÓ×Ñ˜f bÓ)€AÜ˜˜FÓ#€DØ€EØ�k‰k˜/Ó*ò AˆØ�G‰G�C‹Lˆ §¡¨£˜$Ú’Ø—5‘5˜ Ó#ˆDÙ˜DŸO™O¨FÔ3¼DÀ4¹K°TØ�L‰L $°·±À$°Ó1G×1NÑ1NÈsÓ1S×1YÑ1YÓ1[Ðei×erÑerÐy}ÐerÓe~Ñõ  AðAð €Lr   Ú__main__)Ú__doc__r3   r   r   rv   r]   Úurllib.requestr9   r   r   Úbs4r   r=   Úosr5   r~   Úgetenvrx   ru   r6   rO   rk   rŠ   rq   Ú__name__© r   r   ú<module>rª      s~   ðñ÷ A× @× @ß #Ý Û Û 	à	I€Ø0€	Ø
ˆ"�)‰)�KÐ!2Ó
3€Ù�4˜˜AÓ€Ø$€ògòRò #BòJð* ˆzÒÙ…Fð r   