Ë
    ��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edk(  r e«        yy)ut   
æ­£å®‰åŽ¿äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š (crawl_gzza_tzgg.py)
TRS CMS - é�™æ€�åˆ†é¡µ
æ€»è®¡~2790æ�¡(186é¡µ, 15æ�¡/é¡µ)
é    NÚ	gzza_tzggzhttps://www.gzza.gov.cnz
/xwzx/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 )Né   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_gzza_tzgg.pyÚfetch_list_pager      su   € Ø�1‚}Ü�
˜+Ð&‰ä�
˜' ( ¨5Ð1ˆÜ
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CÜ�>‰>×!Ñ! #¨rÐ!Ó2€DØ�9‰9‹;×Ñ˜g¨iÐÓ8Ð8ó    c                 ó|  — g }t        j                  d| t         j                  «      D ]‘  }|j                  d«      j	                  «       }|j                  d«      j	                  «       }|j                  d«      j	                  «       d d }|j                  d«      s	t        |z   }|j                  |||dœ«       Œ“ |S )Nz@<a[^>]*title="([^"]*)"[^>]*href="([^"]*)"[^>]*>.*?<i>([^<]*)</i>r   é   é   é
   Úhttp)Útitler   Údate)ÚreÚfinditerÚDOTALLÚgroupÚstripÚ
startswithÚBASE_URLÚappend)ÚhtmlÚarticlesÚmr$   Úhrefr%   s         r   Ú
parse_listr2      s§   € Ø€Hä�[‰[ØKØŒb�i‰ióò 	Eˆð —‘˜“
× Ñ Ó"ˆØ�w‰w�q‹z×ÑÓ!ˆØ�w‰w�q‹z×ÑÓ! # 2Ð&ˆØ�‰˜vÔ&Ü˜d‘?ˆDØ�‰ %°¸dÑCÕDð	Eð €Or   c                 óT  — 	 t         j                  j                  | t        ¬«      }t         j                  j	                  |d¬«      }|j                  «       j                  dd¬«      }d}t        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|S dS # t         j                  j                  $ r}|j                   dk(  rdndcY d }~S d }~wt"        $ r Y yw xY w)Nr   r	   r
   r   r   r   Ú z%<font[^>]*id="Zoom"[^>]*>(.*?)</font>r   z,<div[^>]*class="zx_content"[^>]*>(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z<[^>]+>i”  )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@   +   sG  € ðÜ�n‰n×$Ñ$ S´'Ð$Ó:ˆÜ�~‰~×%Ñ% c°2Ð%Ó6ˆØ�y‰y‹{×!Ñ! '°)Ð!Ó<ˆØˆÜ�I‰IÐ>ÀÄbÇiÁiÓPˆÙØ—g‘g˜a“j‰Gä—	‘	ÐIÈ4ÔQS×QZÑQZÓ[ˆAÙØŸ'™' !›*�ÙÜ—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š.ˆwÐ0¨bÐ0øÜ�<‰<×!Ñ!ò +Ø—V‘V˜s’]‰r¨Õ*ûÜò Ùðús*   ‚EE# Å!E# Å#F'Æ FÆF'ÆF'Æ&F'c                  óÒ  — t        j                  d«       dt        j                  v } t        }t        j                  D ]1  }|j                  d«      sŒt        |j                  d«      d   «      }Œ3 t        d«       | rdg}t        d«       n:t        dt        |t        «      dz   «      }t        dt        |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!        |«      › �
«       t%        j&                  d«       Œ› t        dt!        |«      › d�«       |sy t)        dd«      5 }t+        j,                  ||d¬«       d d d «       t        d«       t/        j0                  t2        «      }|j5                  «       }|j7                  d«       |j9                  «        d\  }}}t;        |«      D ]Ç  \  }}|j7                  d|d   f«       |j=                  «       d
   d
kD  r|dz  }Œ8t?        |d   «      }|r;	 |j7                  d|d   ||d   t@        |d   f«       |j9                  «        |dz  }n|dz  }|d!z  d
k(  r#t        d"|› dt!        |«      › d#|› d$|› d%|› �
«       t%        j&                  d&«       ŒÉ |jC                  «        t        d'|› d$|› d%|› 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))Nz/rootz--incrementalz--pages=ú=r   z === Phase 1: Collecting URLs ===zMode: INCREMENTAL (page 1)zMode: FULL (z pages)r   r   z  Page ú/z: z	 items, +z, total=z ERROR: gš™™™™™É?z
=== z articles ===z/tmp/gzza_articles.jsonÚwF)Úensure_asciiz"
=== 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
    ))r   r   r   z1SELECT COUNT(*) FROM gov_raw WHERE source_url = ?zjINSERT OR IGNORE INTO gov_raw (title, content, source_url, site_name, publish_date) VALUES (?, ?, ?, ?, ?)r$   r%   z  DB error: é2   z  [z] ins=z skip=z emp=gš™™™™™¹?z
=== Done: ins=z ===)"ÚosÚchdirÚsysÚargvÚTOTAL_PAGESr+   ÚintÚsplitÚprintÚrangeÚminÚsetr   r2   Úaddr-   r8   r<   ÚtimeÚsleepÚopenÚjsonÚdumpÚsqlite3ÚconnectÚTEMP_DBÚcursorÚexecuteÚcommitÚ	enumerateÚfetchoner@   Ú	SITE_NAMEÚclose)ÚincrementalÚ	max_pagesÚargÚrngÚall_articlesÚseenÚpr.   ÚartsÚnewÚar?   ÚfÚconnÚcÚinsÚskipÚempÚiÚartr=   s                        r   Úmainrt   C   se  € Ü‡H�HˆWÔØ!¤S§X¡XÐ-€KÜ€IÜ�x‰xò /ˆØ�>‰>˜*Õ%Ü˜CŸI™I c›N¨1Ñ-Ó.‰Ið/ô
 
Ð
,Ô-ÙØˆcˆÜÐ*Õ+ä�A”s˜9¤kÓ2°QÑ6Ó7ˆÜ�œS ¬KÓ8Ð9¸ÐAÔBà€LÜ‹5€Dàò ˆð	,Ü" 1Ó%ˆDÜ˜dÓ#ˆDØˆCØò �Ø�U‘8 4Ò'Ø—H‘H˜Q˜u™XÔ&Ø ×'Ñ'¨Ô*Ø˜1‘H‘Cð	ô
 �G˜A˜3˜a¤˜}¨B¬s°4«y¨k¸À3À%ÀxÔPSÐT`ÓPaÐObÐcÔdô 	�
‰
�3�ðô 
ˆF”3�|Ó$Ð% ]Ð
3Ô4ÙØä	Ð'¨Ó	-ð 7°Ü�	‰	�, °Õ6÷7ô 
Ð
/Ô0Ü�?‰?œ7Ó#€DØ�‰‹€AØ‡I�Ið 	ô 
ð
 	‡K�K„Mà�N€CˆˆsÜ˜LÓ)ò ‰ˆˆ3Ø	�	‰	ÐEÈÈEÉ
À}ÔUØ�:‰:‹<˜‰?˜QÒØ�A‰IˆDØÜ˜s 5™zÓ*ˆÙð*Ø—	‘	ð AØ˜‘\ 7¨C°©J¼	À3ÀvÁ;ÐOôð —‘”Ø�q‘‘ð �1‰HˆCØˆr‰6�QŠ;Ü�C˜�s˜!œC Ó-Ð.¨f°S°E¸À¸vÀUÈ3È%ÐPÔQÜ�
‰
�3�ð)ð, 	‡J�J„LÜ	Ð˜S˜E ¨ v¨U°3°%°tÐ
<Õ=øô] ò 	,Ü�G˜A˜3˜h q cÐ*×+Ò+ûð	,ú÷7ñ 7ûô: ò *Ü˜ Q CÐ(×)Ñ)ûð*úsC   Ã$LÃ?ALÆL8É)9MÌ	L5ÌL0Ì0L5Ì8MÍ	M&ÍM!Í!M&Ú__main__)Ú__doc__rV   rG   rI   rS   r&   Úurllib.requestr   rX   r`   r,   r   rZ   r   rK   r   r2   r@   rt   Ú__name__© r   r   ú<module>rz      sm   ðñ÷
 8× 7× 7Ó 7à€	Ø$€ØˆZ�zÐ"€Ø
€ØÐWÐ
X€Ø€ò9òò ò0M>ð` ˆzÒÙ…Fð r   