Ë
    ¸¬uj  ã                   óê  — 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mZmZ d dlZd dl	Z
 e
j                  «       Zej                  ded d¬«       ej                  «       \  ZZej$                  d kD  rej$                  ndZer ede› �«       dZedz   Z e j.                  d	d
«      Z ej2                  «        ed¬«      z
  j5                  d«      ZdZdZdZd„ Zd„ Z d„ Z!d„ Z"e#dk(  r e"«        yy)é    N)ÚdatetimeÚ	timedeltaz--pagesu   é™�åˆ¶é¡µæ•°)ÚtypeÚdefaultÚhelpz[AutoPg] max_pages=zhttp://www.dtyg.gov.cnz/ygxrmzfy/sthj2/list.shtmlÚ	SEARCH_DBz/root/search.dbiG  )Údaysz%Y-%m-%dÚdtygu   é˜³é«˜åŽ¿-ç”Ÿæ€�çŽ¯å¢ƒä¿�æŠ¤zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c           	      óº   — t        j                  dddddt        | gdd¬«      }|j                  d	k(  r)|j                  r|j                  j                  d
d¬«      S y)NÚcurlz-sLz
--max-timeÚ15z-ATé   )Úcapture_outputÚtimeoutr   zutf-8Úreplace)ÚerrorsÚ )Ú
subprocessÚrunÚHEADERSÚ
returncodeÚstdoutÚdecode)ÚurlÚrs     ú/root/gov_crawler/crawl_dtyg.pyÚfetchr      sR   € Ü�‰˜  |°T¸4ÄÈ#ÐNØ Rô	)€Aà‡|�|�qÒ˜QŸXšXØ�x‰x�‰˜w¨yˆÓ9Ð9Øó    c                 óô  — g }t        j                  dt         j                  «      }|j                  | «      D ]½  }|j	                  d«      j                  «       dd }|j	                  d«      j                  d«      }|j	                  d«      j                  «       }t        dz   |z   }|j                  d	d
«      }d|vr$d
|vr |j                  t        dz   t        dz   «      }|j                  |||f«       Œ¿ |S )z9List items are all on the first page with data attributeszK<li[^>]*data-time="([^"]+)"[^>]*data-url="([^"]+)"[^>]*data-title="([^"]+)"é   Né
   é   z./é   ú/z
//ygxrmzfyz	/ygxrmzfyz	ygxrmzfy/z
/ygxrmzfy/)
ÚreÚcompileÚDOTALLÚfinditerÚgroupÚstripÚlstripÚBASEr   Úappend)ÚhtmlÚitemsÚpatternÚmÚpub_dateÚurl_pathÚtitleÚfull_urls           r   Úextract_listr6   $   sê   € à€EÜ�j‰jØVÜ
�	‰	ó€Gð ×Ñ˜dÓ#ò 	2ˆØ—7‘7˜1“:×#Ñ#Ó% c rÐ*ˆØ—7‘7˜1“:×$Ñ$ TÓ*ˆØ—‘˜“
× Ñ Ó"ˆä˜#‘: Ñ(ˆØ×#Ñ# L°+Ó>ˆØ˜hÑ&¨;¸hÑ+FØ×'Ñ'¬¨s©
´D¸<Ñ4GÓHˆHØ�‰�h ¨%Ð0Õ1ð	2ð €Lr   c                 ó^  — d}d}d}t        j                  d| t         j                  «      }|r|j                  d«      j	                  «       }t        j                  d| t         j                  «      }|r"|j                  d«      j	                  «       d d }|s:t        j                  d| «      }|r"|j                  d«      j	                  «       d d }t        j                  d| t         j                  «      }|r7|j                  d«      j	                  «       }t        j
                  dd|«      }nFt        j                  d	| t         j                  «      }|r|j                  d«      j	                  «       }t        j                  d
| t         j                  «      D ]Œ  }|j                  d«      }t        j
                  dd|j                  d«      «      j	                  «       }|j                  d«      st        |j                  d«      sdndz   |z   }|dj                  ||«      z  }ŒŽ |||fS )Nr   z<ucaptitle>(.*?)</ucaptitle>r    z <publishtime>(.*?)</publishtime>r!   z,<meta\s+name="PubDate"[^>]*content="([^"]+)"zJ<div\s+class=['\"]TRS_Editor['\"][^>]*>.*?<ucapcontent>(.*?)</ucapcontent>z <p[^>]*>\s*(?:<br\s*/?>\s*)*</p>za<div\s+class="xl_con3\s+detailCont"[^>]*>.*?<div\s+class=\'TRS_Editor\'[^>]*>(.*?)</div>\s*</div>zC<a[^>]*href="([^"]*\.(?:pdf|docx?|xlsx?|zip|rar))"[^>]*>([^<]+)</a>ú<[^>]+>r"   Úhttpr$   u4   
<p><a href="{}" target="_blank">[é™„ä»¶] {}</a></p>)
r%   Úsearchr'   r)   r*   Úsubr(   Ú
startswithr,   Úformat)r.   r4   r2   Úcontentr1   ÚfmÚfurlÚfnames           r   Úextract_detailrB   7   sî  € Ø€EØ€HØ€Gô 	�	‰	Ð1°4¼¿¹ÓC€AÙØ—‘˜“
× Ñ Ó"ˆô 	�	‰	Ð5°t¼R¿Y¹YÓG€AÙØ—7‘7˜1“:×#Ñ#Ó% c rÐ*ˆñ Ü�I‰IÐEÀtÓLˆÙØ—w‘w˜q“z×'Ñ'Ó)¨#¨2Ð.ˆHô 	�	‰	Ð_ÐaeÔgi×gpÑgpÓq€AÙØ—'‘'˜!“*×"Ñ"Ó$ˆä—&‘&Ð<¸bÀ'ÓJ‰ô �I‰IÐzð  }Aô  CE÷  CLñ  CLó  MˆÙØ—g‘g˜a“j×&Ñ&Ó(ˆGô �k‰kÐ`ÐbfÔhj×hqÑhqÓrò _ˆØ�x‰x˜‹{ˆÜ—‘�z 2 r§x¡x°£{Ó3×9Ñ9Ó;ˆØ�‰˜vÔ&Ü d§o¡o°cÔ&:™3ÀÑCÀdÑJˆDØÐJ×QÑQÐRVÐX]Ó^Ñ^‰ð_ð �(˜GÐ#Ð#r   c                  ó|  — t        d«       t        dt        «       t        dt        «       t        dt        «       t        d«       t	        t        «      } | st        d«       y t        | «      }t        dj                  t        |«      «      «       |st        d«       y d}d}d}d}t        j                  t        «      }|j                  d	«       |D �]Q  \  }}}	|r|d d
 nd}
|
r|
t        k  r|dz  }Œ"|j                  d|f«      }|j                  «       r|dz  }ŒKt	        |«      }|s#t        dj                  |	d d «      «       |dz  }Œ{t        |«      \  }}}|s|	}|s|
}|rt        |j                  «       «      d
k  r|dz  }Œ¶t        j                   dd|«      d d j                  «       }	 d}|j                  ||||||t        |f«       |dz  }|dz  dk(  r2|dkD  r-t        dj                  ||||«      «       |j%                  «        t'        j(                  d«       �ŒT |j%                  «        |j+                  «        t        d«       t        dj                  t        «      «       t        dj                  t        |«      «      «       t        dj                  |«      «       t        dj                  |«      «       t        dj                  |«      «       t        dj                  |«      «       t        d«       y # t"        $ r)}t        dj                  ||	d d «      «       Y d }~�Œbd }~ww xY w)Nz<============================================================z	Crawling:zURL:zCutoff:z ERROR: Failed to fetch list pagezFound {} articles on page 1z*No items found. Check list page structure.r   z»CREATE TABLE IF NOT EXISTS gov_raw (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, content TEXT, publish_date TEXT, source_url TEXT UNIQUE, page_url TEXT, site_name TEXT, summary TEXT)r!   r   r    z+SELECT id FROM gov_raw WHERE source_url = ?z  Empty response: {}é(   r8   éÈ   z„INSERT OR REPLACE INTO gov_raw (title, content, publish_date, source_url, page_url, site_name, summary) VALUES (?, ?, ?, ?, ?, ?, ?)z  DB error: {} - {}r   z:  Progress: {} new, {} existing, {} date-skipped, {} emptyg333333Ó?zSummary for {}:z  Total found:      {}z  Newly inserted:   {}z  Date-skipped:     {}z  Already exists:   {}z  Empty body:       {})ÚprintÚ	SITE_NAMEÚLIST_URLÚCUTOFFr   r6   r=   ÚlenÚsqlite3ÚconnectÚDB_PATHÚexecuteÚfetchonerB   r*   r%   r;   Ú	ExceptionÚcommitÚtimeÚsleepÚclose)Ú	list_htmlr/   ÚtotalÚ
skip_datesÚskip_existingÚemptyÚdbr   Údate_strr4   Ú	date_partÚcurÚdetail_htmlÚdetail_titleÚdetail_dater>   ÚsummaryÚsqlÚes                      r   Úmainrd   b   sô  € Ü	ˆ(„OÜ	ˆ+”yÔ!Ü	ˆ&”(ÔÜ	ˆ)”VÔÜ	ˆ(„Oä”h“€IÙÜÐ0Ô1Øä˜Ó#€EÜ	Ð
'×
.Ñ
.¬s°5«zÓ
:Ô;áÜÐ:Ô;Øà€EØ€JØ€MØ€Eä	�‰œÓ	!€BØ‡J�Jð  Mô  Nà %ó ,ÑˆˆX�uá%-�H˜S˜b‘M°2ˆ	Ù˜¤VÒ+Ø˜!‰OˆJØð �j‰jÐFÈÈÓOˆØ�<‰<Œ>Ø˜QÑˆMØô ˜C“jˆÙÜÐ(×/Ñ/°°c°r°
Ó;Ô<Ø�Q‰JˆEØä-;¸KÓ-HÑ*ˆ�k 7ÙØ ˆLÙØ#ˆKáœ#˜gŸm™m›oÓ.°Ò3Ø�Q‰JˆEØä—&‘&˜ R¨Ó1°$°3Ð7×=Ñ=Ó?ˆð	ð YˆCØ�J‰J�s˜\¨7°KÀÀcÌ9ÐV]Ð^Ô_Ø�Q‰JˆEð
 �2‰:˜Š?˜u qšyÜÐN×UÑUÐV[Ð]jÐlvÐx}Ó~ÔØ�I‰IŒKä�
‰
�3ŽðY,ð\ ‡I�I„KØ‡H�H„Jä	ˆ(„OÜ	Ð
×
"Ñ
"¤9Ó
-Ô.Ü	Ð
"×
)Ñ
)¬#¨e«*Ó
5Ô6Ü	Ð
"×
)Ñ
)¨%Ó
0Ô1Ü	Ð
"×
)Ñ
)¨*Ó
5Ô6Ü	Ð
"×
)Ñ
)¨-Ó
8Ô9Ü	Ð
"×
)Ñ
)¨%Ó
0Ô1Ü	ˆ(…Oøô) ò 	ÜÐ'×.Ñ.¨q°%¸¸°*Ó=Ô>Ýûð	ús   Æ3$L	Ì		L;ÌL6Ì6L;Ú__main__)$ÚosÚsysr%   rR   rK   r   r   r   Ú_SYSÚargparseÚ_APÚArgumentParserÚ
_AP_PARSERÚadd_argumentÚintÚparse_known_argsÚ_AP_ARGSÚ_ÚpagesÚ_MAX_PGrF   r,   rH   ÚgetenvrM   ÚnowÚstrftimerI   Ú	SITE_CODErG   r   r   r6   rB   rd   Ú__name__© r   r   ú<module>rz      s   ðã 	Ø =ç -× -× -ß (ó ã ØˆS×ÑÓ!€
Ø 
× Ñ ˜	¨°Q¸^Ð Ô LØ×)Ñ)Ó+�€ˆ!Ø$ŸN™N¨QÒ.ˆ(�.Š.°D€Ù
Ù	Ð ˜yÐ
)Ô*à€ØÐ.Ñ.€Ø
ˆ"�)‰)�KÐ!2Ó
3€Ø
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€Ø€	Ø*€	à
{€òòò&)$òVSðj ˆzÒÙ…Fð r   