Ë
    ��vj"  ã                   ó˜   — 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Z	dZ
e
› d�ZdZddiZd	Zd
Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uk   
çº³é›�åŽ¿äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š (crawl_nayong_tzgg.py)
TRS CMS - é�™æ€�åˆ†é¡µ
æ€»è®¡3254æ�¡ï¼Œ163é¡µ
é    NÚnayong_tzggzhttps://www.gznayong.gov.cnz
/xwdt/tzggz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36é£   é   c                 ó  — | dk(  r
t         › d�}nt         › d| › d�}t        j                  j                  |t        ¬«      }t        j                  j                  |d¬«      }|j                  «       j                  dd	¬
«      S )zFetch one list pageé   z/index.htmlz/index_z.html©Úheadersé   ©Útimeoutúutf-8Úreplace©Úerrors)ÚLIST_URLÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecode)Úpage_numÚurlÚreqÚresps       ú&/root/gov_crawler/crawl_nayong_tzgg.pyÚfetch_list_pager      su   € à�1‚}Ü�
˜+Ð&‰ä�
˜' ( ¨5Ð1ˆÜ
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CÜ�>‰>×!Ñ! #¨rÐ!Ó2€DØ�9‰9‹;×Ñ˜g¨iÐÓ8Ð8ó    c                 óv  — g }t        j                  d| t         j                  «      D ]Ž  }|j                  d«      j	                  «       }|j                  d«      j	                  «       }|j                  d«      j	                  «       }|j                  d«      s	t        |z   }|j                  |||dœ«       Œ� |S )zExtract articles from list pagezM<a[^>]*title="([^"]*)"[^>]*href="([^"]*)"[^>]*>.*?</a>\s*<span>([^<]*)</span>r   é   é   Úhttp)Útitler   Údate)ÚreÚfinditerÚDOTALLÚgroupÚstripÚ
startswithÚBASE_URLÚappend)ÚhtmlÚarticlesÚmr$   Úhrefr%   s         r   Ú
parse_listr2      s    € à€HÜ�[‰[ØXØŒb�i‰ióò 	Eˆð —‘˜“
× Ñ Ó"ˆØ�w‰w�q‹z×ÑÓ!ˆØ�w‰w�q‹z×ÑÓ!ˆØ�‰˜vÔ&Ü˜d‘?ˆDØ�‰ %°¸dÑCÕDð	Eð €Or   c                 óÆ  — 	 t         j                  j                  | t        ¬«      }t         j                  j	                  |d¬«      }|j                  «       j                  dd¬«      }d}t        j                  d|t        j                  «      }|r|j                  d	«      }nqt        j                  d
|t        j                  «      }|r|j                  d	«      }n8t        j                  d|t        j                  «      }|r|j                  d	«      }|rNt        j                  dd|t        j                  ¬«      }t        j                  dd|t        j                  ¬«      }t        t        j                  dd|«      j                  «       «      }|dk  ry|S # t         j                  j                  $ r}|j                   dk(  rY d}~yY d}~yd}~wt"        $ r Y yw xY w)zFetch article detail contentr   r
   r   r   r   r   Ú z%<font[^>]*id="Zoom"[^>]*>(.*?)</font>r   z2<div[^>]*class="content"[^>]*>(.*?)</div>\s*</div>z.<div[^>]*class="body_content"[^>]*>(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z<[^>]+>i”  N)r   r   r   r   r   r   r   r&   Úsearchr(   r)   ÚsubÚlenr*   ÚerrorÚ	HTTPErrorÚcodeÚ	Exception)r   r   r   r.   Úcontentr0   Útext_lenÚes           r   Úfetch_detailr@   -   sr  € ð!Ü�n‰n×$Ñ$ S´'Ð$Ó:ˆÜ�~‰~×%Ñ% c°2Ð%Ó6ˆØ�y‰y‹{×!Ñ! '°)Ð!Ó<ˆð ˆÜ�I‰IÐ>ÀÄbÇiÁiÓPˆÙØ—g‘g˜a“j‰Gä—	‘	ÐOÐQUÔWY×W`ÑW`ÓaˆAÙØŸ'™' !›*‘ä—I‘IÐOÐQUÔWY×W`ÑW`Óa�ÙØŸg™g a›j�GáÜ—f‘fÐ9¸2¸wÌbÏiÉiÔXˆGÜ—f‘fÐ7¸¸WÌBÏIÉIÔVˆGä”r—v‘v˜j¨"¨gÓ6×<Ñ<Ó>Ó?ˆØ�bŠ=ØØˆøä�<‰<×!Ñ!ò Ø�6‰6�SŠ=ÜÜûÜò Ùðús$   ‚FF ÆF ÆG Æ8GÇG ÇG c                  ó†  — t        j                  d«       dt        j                  v } | rdg}t	        d«       n&t        dt        dz   «      }t	        dt        › d�«       t	        d«       g }t        «       }|D ]š  }	 t        |«      }t        |«      }d}|D ]4  }|d	   |vsŒ|j                  |d	   «       |j                  |«       |dz  }Œ6 t	        d
|› dt        › dt        |«      › d|› dt        |«      › d�«       t        j                  d«       Œœ t        |«      }
t	        d|
› d�«       |
dk(  rt	        d«       y t!        dd«      5 }t#        j$                  ||d¬«       d d d «       t	        d«       t	        d«       t'        j(                  t*        «      }|j-                  «       }|j/                  d«       |j1                  «        d}d}d}d}t3        |«      D �]%  \  }}|j/                  d|d	   f«       |j5                  «       d   dkD  r(|dz  }|dz  dk(  rt	        d|› d|
› d |› d!|› d"|› �
«       Œ[t7        |d	   «      }|r;	 |j/                  d#|d$   ||d	   t8        |d%   f«       |j1                  «        |dz  }n|dz  }|d'z  dk(  s||
dz
  k(  rt	        d|› d|
› d |› d!|› d"|› �
«       ||z
  dk\  r4t!        d(d«      5 }|j;                  t=        |dz   «      «       d d d «       |}t        j                  d)«       �Œ( |j?                  «        t	        d*«       t	        d+|
› �«       t	        d,|› �«       t	        d-|› �«       t	        d.|› �«       y # t        $ r}	t	        d
|› d|	› �«       Y d }	~	�Œd }	~	ww xY w# 1 sw Y   �Œ"xY w# t        $ r}	t	        d&|	› �«       Y d }	~	�Œ$d }	~	ww xY w# 1 sw Y   ŒÑxY w)/Nz/rootz--incrementalr   zMode: INCREMENTAL (page 1)zMode: FULL (z pages)z(=== Phase 1: Collecting article URLs ===r   r   z  Page ú/z: z	 items, +z new, z totalz ERROR: gš™™™™™É?z
=== z unique articles collected ===zNo articles found!z/tmp/nayong_articles.jsonÚwF)Úensure_asciiz"Saved to /tmp/nayong_articles.jsonz"
=== Phase 2: Fetching details ===z¼CREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT, content TEXT, source_url TEXT UNIQUE,
        site_name TEXT, publish_date TEXT
    )éÿÿÿÿz1SELECT COUNT(*) FROM gov_raw WHERE source_url = ?éd   z  [z] done=z skip=z empty=zjINSERT OR IGNORE INTO gov_raw (title, content, source_url, site_name, publish_date) VALUES (?, ?, ?, ?, ?)r$   r%   z  DB error: é2   z/tmp/nayong_progress.txtg333333Ã?z
=== Done ===zTotal: z
Inserted: z	Skipped: zEmpty content: ) ÚosÚchdirÚsysÚargvÚprintÚrangeÚTOTAL_PAGESÚsetr   r2   Úaddr-   r8   r<   ÚtimeÚsleepÚopenÚjsonÚdumpÚsqlite3ÚconnectÚTEMP_DBÚcursorÚexecuteÚcommitÚ	enumerateÚfetchoner@   Ú	SITE_NAMEÚwriteÚstrÚclose)ÚincrementalÚpages_to_fetchÚall_articlesÚ	seen_urlsÚpager.   r/   ÚnewÚartr?   ÚtotalÚfÚconnÚcÚinsertedÚskippedÚemptyÚ	last_saveÚir=   s                       r   Úmainrr   S   sé  € Ü‡H�HˆWÔØ!¤S§X¡XÐ-€KáØ˜ˆÜÐ*Õ+ä˜q¤+°¡/Ó2ˆÜ�œ[˜M¨Ð1Ô2ô 
Ð
4Ô5Ø€LÜ“€Iàò ˆð	/Ü" 4Ó(ˆDÜ! $Ó'ˆHØˆCØò �Ø�u‘: YÒ.Ø—M‘M # e¡*Ô-Ø ×'Ñ'¨Ô,Ø˜1‘H‘Cð	ô
 �G˜D˜6 ¤; -¨r´#°h³-°À	È#ÈÈfÔUXÐYeÓUfÐTgÐgmÐnÔoô 	�
‰
�3�ðô �Ó€EÜ	ˆF�5�'Ð7Ð
8Ô9Ø�‚zÜÐ"Ô#Øô 
Ð)¨3Ó	/ð 7°1Ü�	‰	�, °Õ6÷7ä	Ð
.Ô/ô 
Ð
/Ô0ä�?‰?œ7Ó#€DØ�‰‹€AØ‡I�Ið 	ô 
ð
 	‡K�K„Mà€HØ€GØ€EØ€Iä˜LÓ)ó ‰ˆˆ3Ø	�	‰	ÐEÈÈEÉ
À}ÔUØ�:‰:‹<˜‰?˜QÒØ�q‰LˆGØ�3‰w˜!Š|Ü˜˜A˜3˜a ˜w g¨h¨Z°v¸g¸YÀgÈeÈWÐUÔVØä˜s 5™zÓ*ˆÙð*Ø—	‘	ð AØ˜‘\ 7¨C°©J¼	À3ÀvÁ;ÐOôð —‘”Ø˜A‘‘ð �Q‰JˆEàˆr‰6�QŠ;˜!˜u q™yš.Ü�C˜�s˜!˜E˜7 '¨(¨°6¸'¸À'È%ÈÐQÔRàˆy‰=˜CÒÜÐ0°#Ó6ð $¸!Ø—‘œ˜A ™E›
Ô#÷$àˆIä�
‰
�4Öð=ð@ 	‡J�J„LÜ	ˆNÔÜ	ˆG�E�7Ð
ÔÜ	ˆJ�x�jÐ
!Ô"Ü	ˆI�g�YÐ
Ô Ü	ˆO˜E˜7Ð
#Õ$øôK ò 	/Ü�G˜D˜6 ¨!¨Ð-×.Ò.ûð	/ú÷7ñ 7ûôL ò *Ü˜ Q CÐ(×)Ò)ûð*ú÷$ð $úsO   Á<$MÂ!AMÅNÉ9NË	N7Í	NÍ&M=Í=NÎNÎ	N4ÎN/Î/N4Î7O 	Ú__main__)Ú__doc__rT   rH   rJ   rQ   r&   Úurllib.requestr   rV   r^   r,   r   rX   r   rN   Ú	PAGE_SIZEr   r2   r@   rr   Ú__name__© r   r   ú<module>ry      ss   ðñ÷
 8× 7× 7Ó 7à€	Ø(€ØˆZ�zÐ"€Ø
€ØÐWÐ
X€Ø€Ø€	ò9òò #òL`%ðF ˆzÒÙ…Fð r   