Ë
    Ø˜ejW  ã                   óv  — 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ZdZ	dZ
dZdZd	Zd
ddœZddlZ ej                   ej"                  j$                  «        ej&                  «       Zdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r8 ej                  «       Z e«         ed ej                  «       ez
  d›d�«       yy)u¼   
crawl_ynws_gsgg.py - æ–‡å±±å·ž-å…¬ç¤ºå…¬å‘Š
CMS: æ•°èž�CMS (UCAP), APIåˆ†é¡µ
API: POST /queryList {channelCode: ["gsgg"]}
     20æ�¡/é¡µ, 545æ�¡, ~28é¡µ
æ­£æ–‡ç›´æŽ¥åŒ…å�«åœ¨APIè¿”å›žä¸­
é    N)Údatetimez/root/search.dbz!https://www.ynws.gov.cn/queryListu   æ–‡å±±å·ž-å…¬ç¤ºå…¬å‘Šu   äº‘å�—u   çŽ¯å¢ƒå…¬ç¤ºé   z[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125.0.0.0 Safari/537.36zapplication/json)z
User-AgentzContent-Typec                 óà   — 	 t         j                  t        | ddgdgdœt        dd¬«      }|j                  dk(  r|j                  «       S d S # t        $ r}t        d	|› �«       Y d }~y d }~ww xY w)
Né   ÚwszzfÚgsgg)ÚcurrentÚpageSizeÚwebSiteCodeÚchannelCodeé<   F)ÚjsonÚheadersÚtimeoutÚverifyéÈ   z  ERR: )ÚSESSIONÚpostÚAPI_URLÚHEADERSÚstatus_coder   Ú	ExceptionÚprint)ÚpageÚrÚes      ú$/root/gov_crawler/crawl_ynws_gsgg.pyÚ
fetch_pager   $   sy   € ð
Ü�L‰LœØØØ#˜9Ø"˜8ñ	(
ô
  B¨uð ó 6ˆð Ÿ=™=¨CÒ/ˆq�v‰v‹xÐ9°TÐ9øÜò Ü�˜�sˆmÔÜûðús   ‚AA Á
A Á	A-ÁA(Á(A-c                 ó"  — | syt        j                  dt        | «      «      }|rkt        |j	                  d«      «      t        |j	                  d«      «      t        |j	                  d«      «      }}}d|cxk  rdk  rn n|d›d	|d
›d	|d
›�S dS y)NÚ z(\d{4})-(\d{1,2})-(\d{1,2})é   é   é   iÆ  i3  Ú04dú-Ú02d)ÚreÚsearchÚstrÚintÚgroup)ÚdÚmÚyÚmoÚdays        r   Ú	norm_dater1   2   s‚   € ÙØÜ
�	‰	Ð0´#°a³&Ó9€AÙÜ˜Ÿ™ ›“_¤c¨!¯'©'°!«*£o´s¸1¿7¹7À1»:³ˆsˆ2ˆØ04¸Ô0A¸TÕ0A�!�C�˜˜"˜S˜  3 s )Ð,ÐIÀrÐIØó    c                 ób  — | syt        j                  dd| t         j                  t         j                  z  ¬«      }t        j                  dd|t         j                  t         j                  z  ¬«      }t        j                  dd|«      }t	        |«      dkD  r|d d dz   }|j                  «       S )Nr    z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z<p>\s*<br\s*/?>\s*</p>i0u  ú...)r'   ÚsubÚDOTALLÚIÚlenÚstrip)ÚhtmlÚcleaneds     r   Ú
clean_htmlr=   <   sŠ   € ÙØÜ�f‰fÐ1°2°tÄ2Ç9Á9ÌrÏtÉtÑCSÔT€GÜ�f‰fÐ/°°WÄBÇIÁIÔPR×PTÑPTÑDTÔU€GÜ�f‰fÐ.°°GÓ<€GÜ
ˆ7ƒ|�eÒØ˜&˜5�/ EÑ)ˆØ�=‰=‹?Ðr2   c                 óø  — dd l }|j                  t        d¬«      }|j                  «       }d}g }| D ]†  \  }}}}	}
	 |j	                  d|
f«       |j                  «       rŒ.|j	                  d|
|t        |||	|
dt        t        df«       |j                  }|r|j                  ||t        |	xs df«       |d	z  }Œˆ |j                  «        |rK|D ]  \  }}}}		 |j	                  d||||	f«       Œ  |j                  «        t        dt        |«      › d�«       |j                  «        |S # t        $ r}t        d
|d d › d|› �«       Y d }~�Œd }~ww xY w# t        $ r}t        d|› d|› �«       Y d }~Œ¥d }~ww xY w)Nr   é
   )r   z)SELECT id FROM gov_raw WHERE page_url = ?zíINSERT INTO gov_raw 
                   (page_url, title, site_name, publish_date, content, summary,
                    source_url, category, industry, group_name, script_name)
                   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)u   å…¬ç¤ºå…¬å‘Šzcrawl_ynws_gsgg.pyr    r!   z  [DB ERROR] é   z: zVINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES (?, ?, ?, ?)z  [FTS ERROR] id=u     FTSå�Œæ­¥: õ   æ�¡)Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚfetchoneÚ	SITE_NAMEÚINDUSTRYÚGROUPÚ	lastrowidÚappendr   r   Úcommitr9   Úclose)Ú
items_datarB   ÚconnÚcÚinsertedÚ	fts_batchÚtitleÚdate_strÚcontentÚsummaryÚpage_urlÚnew_idr   ÚridÚsites                  r   Ú
save_to_dbr\   G   s›  € ÛØ�?‰?œ7¨Bˆ?Ó/€DØ�‰‹€AØ€HØ€IØ7Aò 5Ñ3ˆˆx˜ '¨8ð	5Ø�I‰IÐAÀHÀ;ÔOØ�z‰zŒ|ØØ�I‰Ið?ð ˜5¤)¨X°wÀØ˜>¬8´UÐ<PðRôð —[‘[ˆFÙØ× Ñ  &¨%´¸GºMÀrÐ!JÔKØ˜‰M‰Hð!5ð& 	‡K�K„MÙØ)2ò 	6Ñ%ˆC�˜˜gð6Ø—	‘	ØlØ˜%  wÐ/õð	6ð 	�‰ŒÜ�œc )›nÐ-¨SÐ1Ô2Ø‡J�J„LØ€Oøô ò 	5Ü�M %¨¨ * ¨R°¨sÐ3×4Ò4ûð	5ûô ò 6ÜÐ)¨#¨¨b°°Ð4×5Ñ5ûð6ús6   ¼#D*Á AD*ÃEÄ*	EÄ3EÅEÅ	E9ÅE4Å4E9c            
      ó\  — dd l } | j                  t        › d�¬«      }|j                  dt        t
        d¬«       |j                  «       }|j                  }t        dt        j                  «       j                  d«      › d	t        › d
�d¬«       g }t        d|dz   «      D �]$  }t        |«      }|rd|vrt        d|› d�d¬«        �nÿ|d   j                  dg «      }|st        d|› d�d¬«        �nÔd}|D �]µ  }	|	j                  di «      }
|
j                  d«      xs |
j                  d«      xs dj                  «       }t!        j"                  dd|«      j                  «       }|sŒtt%        |
j                  dd«      «      }|
j                  dd«      }	 t'        |t(        «      rt+        j,                  |«      n|}|j                  dd«      }|r|j/                  d«      sd|z   }|j1                  dd«      }|s�Œ	|
j                  d i «      }t'        |t2        «      r|j                  d d«      nt'        |t(        «      r|nd}t5        |«      }t!        j"                  dd!|«      j                  «       }t!        j"                  d"d!|«      d d# }|j7                  |||||f«       |dz  }�Œ¸ t        d|› d$|› d%�d¬«       �Œ' |st        d&«       y t9        |«      }t        dt        j                  «       j                  d«      › d'|› dt;        |«      › d%�d¬«       y #  d}Y �Œ?xY w)(Nr   u   çˆ¬è™«)Údescriptionz--pagesu   çˆ¬å�–é¡µæ•°)ÚtypeÚdefaultÚhelpú[z%H:%M:%Sz] r5   T)Úflushr!   Údatau     ç¬¬u   é¡µ: æ— è¿”å›žÚresultsu	   é¡µ: 0æ�¡ÚsourceÚ	showTitlerT   r    z<[^>]+>ÚpubDateÚurlsz{}ÚpcÚhttpzhttps://www.ynws.gov.cnz\/ú/rV   ú z\s+i,  u   é¡µ: rA   u	   æ— æ•°æ�®u   ] å…¥åº“)ÚargparseÚArgumentParserrH   Úadd_argumentr*   Ú	MAX_PAGESÚ
parse_argsÚpagesr   r   ÚnowÚstrftimeÚranger   Úgetr:   r'   r6   r1   Ú
isinstancer)   r   ÚloadsÚ
startswithÚreplaceÚdictr=   rL   r\   r9   )rn   ÚparserÚargsÚ	max_pagesÚ	all_batchÚpgrd   re   Úpage_okÚitemÚsrcrT   Úpub_dateÚurls_strri   rX   ÚcobjrV   rW   Úsaveds                       r   Úmainr‰   p   sú  € ÛØ×$Ñ$´I°;¸fÐ1EÐ$ÓF€FØ
×Ñ˜	¬´YÀ^ÐÔTØ×ÑÓ€Dà—
‘
€IÜ	ˆAŒh�l‰l‹n×%Ñ% jÓ1Ð2°"´Y°K¸sÐ
CÈ4ÕPà€IÜ�A�y 1‘}Ó%ó '9ˆÜ˜"‹~ˆÙ�v TÑ)Ü�E˜"˜˜^Ð,°DÕ9ÚØ�v‘,×"Ñ" 9¨bÓ1ˆÙÜ�E˜"˜˜YÐ'¨tÕ4ÚàˆØó 	ˆDØ—(‘(˜8 RÓ(ˆCØ—W‘W˜[Ó)ÒC¨S¯W©W°WÓ-=ÒCÀ×JÑJÓLˆEÜ—F‘F˜: r¨5Ó1×7Ñ7Ó9ˆEÙØÜ  §¡¨°BÓ!7Ó8ˆHØ—w‘w˜v tÓ,ˆHðÜ/9¸(ÄCÔ/H”t—z‘z (Ô+Èh�ØŸ8™8 D¨"Ó-�Ù H×$7Ñ$7¸Ô$?Ø8¸8ÑC�Hð  ×'Ñ'¨¨sÓ3ˆHÙÙà—7‘7˜9 bÓ)ˆDÜ1;¸DÄ$Ô1G�d—h‘h˜y¨"Ô-ÔV`ÐaeÔgjÔVkÉdÐqsˆGÜ  Ó)ˆGÜ—f‘f˜Z¨¨gÓ6×<Ñ<Ó>ˆGÜ—f‘f˜V S¨'Ó2°4°CÐ8ˆGà×Ñ˜e X¨w¸ÀÐJÔKØ�q‰LŠGð5	ô8 	��b�T˜˜w˜i sÐ+°4×8ðO'9ñR ÜˆkÔØä�yÓ!€EÜ	ˆAŒh�l‰l‹n×%Ñ% jÓ1Ð2°(¸5¸'ÀÄ3ÀyÃ>ÐBRÐRUÐ
VÐ^bÖcøð-Ø“ús   ÆAL$Ì$L+Ú__main__u   è€—æ—¶: z.1fÚs)r!   )Ú__doc__Úrequestsr'   r   ÚsysÚosÚtimer   rD   r   rH   rJ   rI   rq   r   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningÚSessionr   r   r1   r=   r\   r‰   Ú__name__Út0r   © r2   r   ú<module>r™      sÝ   ðñó Û 	Û Û 
Û 	Û Ý à
€Ø
-€Ø$€	Ø€Ø€Ø€	ð pØ&ñ€ó
 Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà
ˆ(×
Ñ
Ó
€óòòò&òR8dðv ˆzÒØ	ˆ�‰‹€BÙ„FÙ	ˆH�Y�T—Y‘Y“[ ‘^ CÐ(¨Ð
*Õ+ð r2   