Ë
    ��vjC   ã                   ó–   — 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dl	Z	dZ
dZe› d�ZdZdZdd	iZd
„ Zd„ Zd„ Zedk(  r e«        yy)uë   
ä¸œè�¥ç»�æµŽæŠ€æœ¯å¼€å�‘åŒº - å®¡æ‰¹å…¬ç¤º (dyedz_hpsp)
CMS: SupeSite (jPage AJAX)
totalrecord: 5535, perpage: 15, pages: 369
API returns ~46 records per request (groupSize=3 pages)
Strategy: iterate all 369 pages, deduplicate by URL
é    NÚ
dyedz_hpspzhttp://www.dyedz.gov.cnz/module/web/jpage/dataproxy.jspz/root/search.dbé   z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                 óŒ  — | |dddt         dz   ddddd	d
œ}t        j                  j                  |«      }t        dz   |z   }t        j                  j                  |«      j                  d«      }t        j                  j                  ||i t        ¥dt         › d�dœ¥¬«      }t        j                  j                  |d¬«      }|j                  «       j                  d«      }g }	t        j                  d|«      D ]Æ  }
|
j                  d«      }|
j                  d«      j                  «       }|j!                  d«      s	t         |z   }||
j#                  «       d }t        j$                  d|«      }|r|j                  d«      nd}|r%|j'                  d«      }d|d	   › d|d   › d|d   › �}|	j)                  |||dœ«       ŒÈ |	S )z#Fetch a page from the dataproxy APIé   iÆû i  ú/u   ä¸œè�¥ç»�æµŽæŠ€æœ¯å¼€å�‘åŒºé   iÛ›  Ú r   )ÚstartrecordÚ	endrecordÚperpageÚunitidÚwebidÚpathÚwebnameÚcolÚcolumnidÚsourceContentTypeÚpermissiontypeú?úutf-8z!application/x-www-form-urlencodedz/col/col39899/index.html)zContent-TypeÚReferer)ÚdataÚheadersé   ©Útimeoutz/<a[^>]*href="([^"]*)"[^>]*title="([^"]*)"[^>]*>é   ÚhttpNz <span>(\d{2}-\d{2}-\d{2})</span>ú-Ú20)ÚtitleÚurlÚdate)ÚBASE_URLÚurllibÚparseÚ	urlencodeÚAPI_URLÚencodeÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚreÚfinditerÚgroupÚstripÚ
startswithÚendÚsearchÚsplitÚappend)r
   r   ÚparamsÚqueryr"   r   ÚreqÚrespÚxmlÚarticlesÚmÚhrefr!   ÚafterÚdate_mÚdate_strÚpartss                    ú%/root/gov_crawler/crawl_dyedz_hpsp.pyÚ
fetch_listrF      s´  € ð #°ÀrØ 3´¸3±Ø0¸ÈØ°1ñ	€Fô �L‰L×"Ñ" 6Ó*€EÜ
�C‰-˜%Ñ
€CÜ�<‰<×!Ñ! &Ó)×0Ñ0°Ó9€DÜ
�.‰.×
 Ñ
  ¨4ð :Ü
ð:Ø#FÜ�ZÐ7Ð8ò:Ð
 ó €Cô �>‰>×!Ñ! #¨rÐ!Ó2€DØ
�)‰)‹+×
Ñ
˜WÓ
%€Cà€HÜ�[‰[ÐKÈSÓQò IˆØ�w‰w�q‹zˆØ—‘˜“
× Ñ Ó"ˆØ�‰˜vÔ&Ü˜d‘?ˆDà�A—E‘E“G�H�ˆÜ—‘Ð>ÀÓFˆÙ&,�6—<‘< ”?°"ˆÙØ—N‘N 3Ó'ˆEØ˜E !™H˜: Q u¨Q¡x j°°%¸±(°Ð<ˆHØ�‰ %°¸hÑGÕHðIð €Oó    c           	      óâ  — t        t        «      D �]A  }	 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	«      }|�r't        j                  dd|t        j                  ¬«      }t        j                  dd|t        j                  ¬«      }t        t        j                  dd|«      j                  «       «      }|dk\  r|c S d|v sd|v ršt        j                   d|t        j                  t        j"                  z  «      }|rbg }	|D ]E  \  }
}|
j%                  d«      s	t&        |
z   }
|	j)                  d|
› d|j                  «       › d�«       ŒG ddj+                  |	«      z   c S  y y# t        j,                  j.                  $ rA}|j0                  dk(  rY d}~ y|t        d	z
  k  rt3        j4                  d«       Y d}~�ŒŸd}~wt6        $ r3}|t        d	z
  k  rt3        j4                  d«       nY d}~ yY d}~�ŒÙd}~ww xY w)zFetch detail page content)r   r   r   r   Úreplace)Úerrorsr	   zid="zoom"[^>]*>(.*?)</div>r   z#class="bt_content"[^>]*>(.*?)</div>zA<!--ZJEG_RSS\.content\.begin-->(.*?)<!--ZJEG_RSS\.content\.end-->z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z<[^>]+>é2   z.pdfz
/download/z)<a[^>]*href="([^"]*\.pdf)"[^>]*>(.*?)</a>r   z	<a href="z" target="_blank">z</a>u   <p>é™„ä»¶ï¼š</p>i”  Nr   )ÚrangeÚMAX_RETRIESr%   r*   r+   r,   r-   r.   r/   r0   r6   ÚDOTALLr2   ÚsubÚlenr3   ÚfindallÚIr4   r$   r8   ÚjoinÚerrorÚ	HTTPErrorÚcodeÚtimeÚsleepÚ	Exception)r"   Úattemptr;   r<   ÚhtmlÚcontentr?   Útext_lenÚattsÚ	pdf_linksÚahrefÚatextÚes                rE   Úfetch_detailrd   6   sm  € äœÓ%ó /ˆð.	Ü—.‘.×(Ñ(¨´gÐ(Ó>ˆCÜ—>‘>×)Ñ)¨#°rÐ)Ó:ˆDØ—9‘9“;×%Ñ% g°iÐ%Ó@ˆDð ˆGÜ—	‘	Ð7¸¼r¿y¹yÓIˆAÙØŸ'™' !›*‘ä—I‘IÐDÀdÌBÏIÉIÓV�ÙØŸg™g a›j‘GäŸ	™	Ð"fÐhlÔnp×nwÑnwÓx�AÙØ"#§'¡'¨!£*˜âÜŸ&™&Ð!=¸rÀ7ÔRT×R[ÑR[Ô\�ÜŸ&™&Ð!;¸RÀÔPR×PYÑPYÔZ�ÜœrŸv™v j°"°gÓ>×DÑDÓFÓG�Ø˜r’>Ø"’Nà˜T‘> \°TÑ%9ÜŸ:™:Ð&RÐTXÔZ\×ZcÑZcÔfh×fjÑfjÑZjÓk�DÙØ$&˜	Ø,0ò g™L˜E 5Ø#(×#3Ñ#3°FÔ#;Ü(0°5Ñ(8 Ø%×,Ñ,¨y¸¸Ð?QÐRW×R]ÑR]ÓR_ÐQ`Ð`dÐ-eÕfðgð  2°B·G±G¸IÓ4FÑFÒFáðK/ð` øô �|‰|×%Ñ%ò 	Ø�v‰v˜Š}ÝØœ q™Ò(Ü—
‘
˜1”ÿùÜò 	Øœ q™Ò(Ü—
‘
˜1•åõ ûð	ús1   •FIÆ0BIÉK.É3J/Ê!J/Ê/K.Ê;"K)Ë)K.c                  óš  — t        j                  d«       t        t        j                  «      dkD  rt        j                  d   nd} | dk(  �rt        d«       t        «       }g }t        dd«      D ]˜  }|dz
  dz  dz   }|dz  }	 t        ||«      }d}|D ]4  }|d   |vsŒ|j                  |d   «       |j                  |«       |dz  }Œ6 t        d	|› d
t        |«      › d|› dt        |«      › �«       t        j                  d«       Œš t        dt        |«      › d�«       t        dd«      5 }
t        j                   ||
d¬«       d d d «       t        d«       y | dk(  �rit        d«       t        d«      5 }
t        j"                  |
«      }d d d «       d}t         j$                  j'                  d«      rJt        d«      5 }
t)        |
j+                  «       j-                  «       «      }d d d «       t        d|› d�«       t/        j0                  t2        «      }|j5                  «       }|j7                  d«       |j9                  «        t        «      }d}d}d}t;        ||d  |«      D �]  \  }}|j7                  d|d   f«       |j=                  «       d   dkD  r(|dz  }|dz  dk(  rt        d|› d|› d |› d!|› d"|› �
«       Œ[t?        |d   «      |d#<   |d#   s|dz  }n=	 |j7                  d$|d%   |d#   |d   t@        |d&   f«       |j9                  «        |dz  }|d(z  dk(  sŒ½t        d|› d|› d)|› d*|› d+|› �
«       t        dd«      5 }
|
jC                  tE        |dz   «      «       d d d «       �Œ |jG                  «        t        d,«       t        d-|› �«       t        d.|› �«       t        d/|› �«       t        d0|› �«       y y # t        $ r}	t        d	|› d|	› �«       Y d }	~	�Œød }	~	ww xY w# 1 sw Y   �Œ®xY w# 1 sw Y   �Œux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)1Nz/rootr   Úlistz,=== Phase 1: Collecting all article URLs ===ir  r   r   r"   u     ç¬¬u   é¡µ: u   æ�¡, æ–°å¢žu   , ç´¯è®¡u   é¡µå¤±è´¥: g333333Ó?u   
æ€»å…±u   æ�¡å”¯ä¸€æ–‡ç« z/tmp/dyedz_articles.jsonÚwF)Úensure_asciiu%   å·²ä¿�å­˜åˆ° /tmp/dyedz_articles.jsonÚdetailz)=== Phase 2: Fetching article details ===z/tmp/dyedz_progress.txtu   ä»Žç¬¬u	   æ�¡ç»§ç»­a"  
            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  [r   z] u   å·²è·³è¿‡/inserted=z/empty=r]   zjINSERT OR IGNORE INTO gov_raw (title, content, source_url, site_name, publish_date) VALUES (?, ?, ?, ?, ?)r!   r#   z  DB error: é   z] done=z	 skipped=z empty=u   
=== å®Œæˆ� ===u   æ€»è®¡: u   æ–°å¢ž: u   å·²å­˜åœ¨: u   ç©ºæ­£æ–‡(è·³è¿‡): )$ÚosÚchdirrQ   ÚsysÚargvÚprintÚsetrM   rF   Úaddr8   rZ   rX   rY   ÚopenÚjsonÚdumpÚloadr   ÚexistsÚintr.   r3   Úsqlite3ÚconnectÚTEMP_DBÚcursorÚexecuteÚcommitÚ	enumerateÚfetchonerd   Ú	SITE_NAMEÚwriteÚstrÚclose)ÚmodeÚ	seen_urlsÚall_articlesÚpager
   r   r>   ÚnewÚartrc   ÚfÚ
start_fromÚconnÚcÚtotalÚinsertedÚskippedÚemptyÚis                      rE   Úmainr”   j   s_  € Ü‡H�HˆWÔÜœcŸh™h›-¨!Ò+Œ3�8‰8�AŠ;°€Dàˆvƒ~äÐ<Ô=Ü“Eˆ	Øˆä˜!˜S“Mò 	ˆDØ !™8 r™/¨AÑ-ˆKØ˜r™	ˆIð
4Ü% k°9Ó=�Ø�Ø#ò !�CØ˜5‘z¨Ò2Ø!Ÿ™ c¨%¡jÔ1Ø$×+Ñ+¨CÔ0Ø˜q™™ð	!ô
 ˜˜d˜V 5¬¨X«¨°{À3À%ÀxÔPSÐT`ÓPaÐObÐcÔdô �J‰J�s�Oð	ô  	�œ˜\Ó*Ð+¨?Ð;Ô<ô Ð,¨cÓ2ð 	;°aÜ�I‰I�l A°EÕ:÷	;äÐ5Õ6à	�Ó	äÐ9Ô:ô Ð,Ó-ð 	(°ÜŸ9™9 Q›<ˆL÷	(ð ˆ
Ü�7‰7�>‰>Ð3Ô4ÜÐ/Ó0ð 3°AÜ  §¡£§¡Ó!1Ó2�
÷3ä�F˜:˜, iÐ0Ô1ä�‰œwÓ'ˆØ�K‰K‹MˆØ	�	‰	ð 	ô 		ð 	�‰Œä�LÓ!ˆØˆØˆØˆä ¨Z¨[Ð 9¸:ÓFó 	(‰FˆAˆsà�I‰IÐIÈCÐPUÉJÈ=ÔYØ�z‰z‹|˜A‰ Ò"Ø˜1‘�Ø�s‘7˜a’<Ü˜C ˜s ! E 7¨"¨W¨IÐ5HÈÈ
ÐRYÐZ_ÐY`ÐaÔbØô *¨#¨e©*Ó5ˆC�	‰Nà�y’>Ø˜‘
‘ð.Ø—I‘Ið EØ˜W™ s¨9¡~°s¸5±zÄ9ÈcÐRXÉkÐZôð —K‘K”MØ ‘M�Hð �2‰v˜‹{Ü˜˜A˜3˜a ˜w g¨h¨Z°yÀÀ	ÈÐQVÐPWÐXÔYÜÐ3°SÓ9ð (¸QØ—G‘GœC  A¡›JÔ'÷(ñ (ð9	(ð> 	�
‰
ŒÜÐ Ô"Ü�˜˜Ð Ô!Ü�˜˜
Ð#Ô$Ü�˜G˜9Ð%Ô&ÜÐ# E 7Ð+Õ,ðM 
øô ò 4Ü˜˜d˜V ;¨q¨cÐ2×3Ò3ûð4ú÷	;ñ 	;ú÷	(ñ 	(ú÷3ñ 3ûô\ !ò .Ü˜L¨¨Ð,×-Ò-ûð.ú÷
(ñ (úsg   ÂOÂAOÄ/O4Å8PÇ(PË#<PÍQ Ï	O1ÏO,Ï,O1Ï4O>ÐPÐPÐ	P=Ð$P8Ð8P=Ñ Q
	Ú__main__)Ú__doc__Úurllib.requestr%   Úurllib.parser0   rt   rl   rn   rX   ry   r�   r$   r(   r{   rN   r,   rF   rd   r”   Ú__name__© rG   rE   ú<module>r›      sl   ðñ÷ F× E× E× Eà€	Ø$€ØˆJÐ5Ð
6€Ø
€Ø€àÐWÐ
X€ò òD2òhg-ðR ˆzÒÙ…Fð rG   