Ë
    ¸¬ujë  ã                   ó^  — 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mZ ddl	m
Z
 ddlZddlZ ej                  d«       dZdZdd	dd
dœZdZdZdZdZdZ ej,                  «        ed¬«      z
  j/                  d«      Z eej4                  «      dk\  Zer eej4                  d   «      ndZer+ ej,                  «        ee¬«      z
  j/                  d«      ZneZ eej4                  «      dk\  r eej4                  d   «      ndZddddœZ d„ Z!d„ Z"d„ Z#dd„Z$d„ Z%e&dk(  r e%«        yy) u‹   
crawl_eiacloud_local.py â€” çŽ¯è¯„äº‘(www.eiacloud.com) æœ¬åœ°Macè·‘
ä½¿ç”¨ POST è¡¨å�•æ��äº¤åˆ†é¡µï¼ˆé�žAPIï¼‰ï¼Œé�¿å…�æœ�åŠ¡å™¨IPè¢«å°�
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoupÚignorez"https://www.eiacloud.com/gs/list/1z$https://www.eiacloud.com/gs/detail/1zuMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36z!application/x-www-form-urlencodedzhttps://www.eiacloud.com)z
User-AgentzContent-TypeÚRefererÚOriging       @zroot@1.94.217.116z/mnt/data/search.dbu	   çŽ¯è¯„äº‘u   çŽ¯è¯„å…¬ç¤ºiG  )Údaysz%Y-%m-%dé   é   i'  é   )ÚnewÚskipÚerrc           	      óÒ   — | ddddddddœ}	 t        j                  t        t        |dd¬«      }d	|_        |j
                  S # t        $ r}t        d
| › d|› �«       Y d}~yd}~ww xY w)z-Fetch a single page via POST form submission.éÌ  é   r   r   )zpageModel.numberNozpageModel.totalPagezpageModel.numberSizeÚsortÚ
filterTypeÚselectÚgkClassifyIdÚ	gkPlateIdé   F)ÚheadersÚdataÚtimeoutÚverifyúutf-8z  [ERR] page z: NÚ )ÚrequestsÚpostÚBASE_URLÚHEADERSÚencodingÚtextÚ	ExceptionÚprint)Úpage_numr   ÚrÚes       ú)/root/gov_crawler/crawl_eiacloud_local.pyÚ
fetch_pager+   +   sw   € ð 'Ø#Ø "ØØØØØñ	€DðÜ�M‰Mœ(¬G¸$ÈÐSXÔYˆØˆŒ
Ø�v‰vˆøÜò Ü�˜h˜Z r¨!¨Ð-Ô.Üûðús   �4A Á	A&ÁA!Á!A&c                 óh  — g }t        j                  d| t         j                  «      D ]r  }|j                  d«      }|j                  d«      j	                  «       }t
        › d|› �}|sŒAt        |«      dkD  sŒP|j                  |||j	                  «       df«       Œt t        |«      dk  rœg }t        j                  d| t         j                  «      D ]r  }|j                  d«      }|j                  d«      j	                  «       }t
        › d|› �}|sŒAt        |«      dkD  sŒP|j                  |||j	                  «       df«       Œt t        j                  d«      }|j                  | «      }t        |«      dkD  r7t        |«      D ])  \  }}	|t        |«      k  sŒ|	d	   |	d   |	d   ||   f||<   Œ+ |S )
z3Extract (url, id, title, date) from list page HTML.uN   <a\s+href="/gs/detail/1\?id=([^"&]+)"[^>]*>((?![^<]*æ–°çª—å�£æ‰“å¼€)[^<]+)</a>r   r
   z?id=é   r   zF<a\s+href="/gs/detail/1\?id=([^"&]+)"[^>]*title="([^"]*)"[^>]*>.*?</a>z!(\d{4}-\d{2}-\d{2})\s+\d{2}:\d{2}r   )ÚreÚfinditerÚDOTALLÚgroupÚstripÚ
DETAIL_URLÚlenÚappendÚcompileÚfindallÚ	enumerate)
ÚhtmlÚitemsÚmÚitem_idÚtitleÚurlÚdate_patternÚdatesÚiÚitems
             r*   Ú
parse_listrC   ?   s—  € à€Eä�[‰[ØYØŒb�i‰ióò <ˆð —'‘'˜!“*ˆØ—‘˜“
× Ñ Ó"ˆÜ�˜D  	Ð*ˆÚ”S˜“Z !“^Ø�L‰L˜#˜w¨¯©«°rÐ:Õ;ð<ô ˆ5ƒz�A‚~ØˆÜ—‘ØUØ”"—)‘)ó
ò 	@ˆAð —g‘g˜a“jˆGØ—G‘G˜A“J×$Ñ$Ó&ˆEÜ�L  W IÐ.ˆCÚœ˜U› a›Ø—‘˜c 7¨E¯K©K«M¸2Ð>Õ?ð	@ô —:‘:ÐBÓC€LØ× Ñ  Ó&€Eä
ˆ5ƒz�A‚~ä  Ó'ò 	A‰GˆAˆtØ”3�u“:‹~Ø  ™G T¨!¡W¨d°1©g°u¸Q±xÐ@��a’ð	Að €Ló    c                 óœ  ‡	— 	 t        j                  | t        dd¬«      }d|_        |j                  }t        j                  d|t
        j                  «      }|r|j                  d«      }n:t        j                  d|t
        j                  «      }|r|j                  d«      }nyt        j                  d	d|t
        j                  ¬
«      }t        j                  dd|t
        j                  ¬
«      }t        j                  dd|«      }t        j                  dd|«      }g Š	ˆ	fd„}t        j                  d||t
        j                  ¬
«      }t        j                  dd|«      }t        j                  dd|«      }‰	D ]  \  }}|j                  ||«      }Œ |j                  «       S # t        $ r}t        d|› �«       Y d}~yd}~ww xY w)z&Fetch detail page and extract content.r   F)r   r   r   r   z-<div class="detail_text">(.*?)</div>\s*</div>r   z$<div class="detail_text">(.*?)</div>r   z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z	<br\s*/?>ú
z</p>z

c                 ój   •— dt        ‰«      › d�}‰j                  || j                  d«      f«       |S )NÚ__TABLE_Ú__r   )r4   r5   r1   )r;   ÚphÚtable_placeholderss     €r*   Ú
save_tablez fetch_detail.<locals>.save_table€   s8   ø€ ØœCÐ 2Ó3Ð4°BÐ7ˆBØ×%Ñ% r¨1¯7©7°1«:Ð&6Ô7ØˆIrD   z<table[^>]*>.*?</table>z<[^>]+>z\n{3,}z    [ERR] detail: N)r   Úgetr"   r#   r$   r.   Úsearchr0   r1   ÚsubÚreplacer2   r%   r&   )
r>   r(   r9   r;   ÚtxtrM   rK   Úhtr)   rL   s
            @r*   Úfetch_detailrT   g   ss  ø€ ð#Ü�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆô �I‰IÐFÈÌbÏiÉiÓXˆÙØ—'‘'˜!“*‰Cä—	‘	ÐAÀ4ÌÏÉÓSˆAÙØ—g‘g˜a“j‘àô �f‰fÐ1°2°sÄ"Ç)Á)ÔLˆÜ�f‰fÐ/°°SÄÇ	Á	ÔJˆÜ�f‰f�\ 4¨Ó-ˆÜ�f‰f�W˜f cÓ*ˆàÐô	ô �f‰fÐ/°¸SÌÏ	É	ÔRˆÜ�f‰f�Z  SÓ)ˆÜ�f‰f�Y ¨Ó,ˆØ(ò 	&‰FˆB�Ø—+‘+˜b "Ó%‰Cð	&à�y‰y‹{ÐøÜò ÜÐ" 1 #Ð&Ô'Üûðús   ƒB"F* Â&DF* Æ*	GÆ3GÇGc                 ó�   — t        | «      |k  r| S | d | }d|v r,|j                  d«      }|j                  d«      }||kD  r|d | }|S )Nú<ú>)r4   Úrfind)r$   Úmax_lenÚ	truncatedÚ	last_openÚ
last_closes        r*   Úsafe_summaryr]   Ž   s\   € Ü
ˆ4ƒy�GÒØˆØ�X�g�€IØ
ˆiÑØ—O‘O CÓ(ˆ	Ø—_‘_ SÓ)ˆ
Ø�zÒ!Ø! * 9Ð-ˆIØÐrD   c                  óÄ  — t         j                  j                  t         j                  j                  t         j                  j	                  t
        «      «      d«      } t        j                  | «      }|j                  d«       |j                  d«       |j                  «        |j                  «       }t        d«       t        d«      }|st        d«       y t        j                  d|«      }|rt        |j!                  d«      «      nd}t        d	|› �«       t"        rt"        |k  rt"        }t        d
|› d�«       t%        d|dz   «      D �]‚  }|dk(  rnt        |«      }|st&        dxx   dz  cc<   Œ)t)        |«      }|st        d|› d|› d�«       ŒId}|D ]Ú  \  }	}
}}|rt+        |«      dk  rŒ|sd}|j                  d|	f«       |j-                  «       rt&        dxx   dz  cc<   ŒRt/        |	«      }|rt+        |«      dk  rt&        dxx   dz  cc<   Œt1        |«      }|j                  d||	||d d |f«       |j2                  dkD  r|dz  }t&        dxx   dz  cc<   ŒÊt&        dxx   dz  cc<   ŒÜ |j                  «        t        d|› d|› d|› dt&        d   › dt&        d   › d�«       ||k  s�Œjt5        j6                  t8        «       �Œ… |j;                  «        t&        d   t&        d   z   }t        d«       t        dt&        d   › dt&        d   › d t&        d   › �«       t        d!| › d"t         j                  j=                  | «      d#z  d#z  › d$�«       y )%Nzeiacloud_temp.dbzPRAGMA journal_mode=WALa  CREATE TABLE IF NOT EXISTS eiacloud_data (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT,
        page_url TEXT UNIQUE,
        content TEXT,
        publish_date TEXT,
        summary TEXT,
        crawled_at TEXT DEFAULT (datetime('now','localtime'))
    )z%Fetching page 1 to get total pages...r   z[FATAL] Cannot fetch page 1u   å…±(\d+)é¡µr   zTotal pages: zLimited to z pages for this runr   z  Page ú/z: 0 items (skip)r   r-   r   z/SELECT id FROM eiacloud_data WHERE page_url = ?r   é   zžINSERT OR IGNORE INTO eiacloud_data
                         (title, page_url, content, publish_date, summary)
                         VALUES (?, ?, ?, ?, ?)é
   r   z: +z (new=z, skip=ú)u   
=== å®Œæˆ� ===u   æ–°å¢ž: u
   , è·³è¿‡: u
   , é”™è¯¯: u   æ•°æ�®æ–‡ä»¶: z (i   zMB))ÚosÚpathÚjoinÚdirnameÚabspathÚ__file__Úsqlite3ÚconnectÚexecuteÚcommitÚcursorr&   r+   r.   rO   Úintr1   Ú	MAX_PAGESÚrangeÚstatsrC   r4   ÚfetchonerT   r]   Útotal_changesÚtimeÚsleepÚSLEEPÚcloseÚgetsize)Úlocal_dbÚconnÚcr9   r;   Útotal_pagesÚpager:   Úpage_newr>   r<   r=   Údate_strÚcontentÚsummaryÚtotals                   r*   Úmainrƒ   ™   s   € ä�w‰w�|‰|œBŸG™GŸO™O¬B¯G©G¯O©O¼HÓ,EÓFÐHZÓ[€HÜ�?‰?˜8Ó$€DØ‡L�LÐ*Ô+Ø‡L�Lð 	ô 
ð 	‡K�K„MØ�‰‹€Aô 
Ð
1Ô2Ü�a‹=€DÙÜÐ+Ô,Øä
�	‰	�. $Ó'€AÙ%&”#�a—g‘g˜a“j”/¨D€KÜ	ˆM˜+˜Ð
'Ô(Ý”Y Ò,ÜˆÜ�˜K˜=Ð(;Ð<Ô=ô �a˜ q™Ó)ó 1ˆØ�1Š9Øä˜dÓ#ˆDÙÜ�e“ Ñ!“Øä˜4Ó ˆÙÜ�G˜D˜6  ; -Ð/?Ð@ÔAØàˆØ-2ò 	#Ñ)ˆC�˜% ÙœC ›J¨šNØÙØ�ð �I‰IÐGÈ#ÈÔPØ�z‰zŒ|Ü�f“ Ñ"“Øô # 3Ó'ˆGÙœc '›l¨RÒ/Ü�f“ Ñ"“Øä" 7Ó+ˆGØ�I‰Ið 3ð ˜c 7¨H°S°b¨M¸7ÐCôEð ×!Ñ! AÒ%Ø˜A‘�Ü�e“ Ñ!”ä�f“ Ñ"”ð7	#ð: 	�‰ŒÜ�˜�v˜Q˜{˜m¨3¨x¨j¸¼uÀU¹|¸nÈGÔTYÐZ`ÑTaÐSbÐbcÐdÔeð �+ÔÜ�J‰J”uÖðc1ðf 	‡J�J„Lä�%‰Lœ5 ™=Ñ(€EÜ	ÐÔÜ	ˆH”U˜5‘\�N *¬U°6©]¨O¸:ÄeÈEÁlÀ^Ð
TÔUÜ	ˆN˜8˜* B¤r§w¡w§¡°xÓ'@À$Ñ'FÈÑ'LÐ&MÈSÐ
QÕRrD   Ú__main__)iô  )'Ú__doc__rc   r.   Úsysrt   Újsonri   r   r   Úbs4r   r   ÚwarningsÚfilterwarningsr!   r3   r"   rv   Ú
SERVER_SSHÚSERVER_SEARCH_DBÚ	SITE_NAMEÚCATEGORYÚnowÚstrftimeÚCUTOFFr4   ÚargvÚis_incrementalrn   Úcutoff_daysÚcutoffro   rq   r+   rC   rT   r]   rƒ   Ú__name__© rD   r*   ú<module>r˜      sD  ðñ÷ (× '× 'ß (Ý Û Û Ø €× Ñ ˜Ô !à/€Ø3€
ð JØ7Ø3Ø(ñ	€ð 	€à €
Ø(Ð à€	Ø€à
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€á�S—X‘X“ !Ñ#€Ù"0‰c�#—(‘(˜1‘+Ô°d€ÙØˆh�l‰l‹n™y¨kÔ:Ñ:×DÑDÀZÓP�Fà€Fñ !$ C§H¡H£°Ò 2‰C�—‘˜‘Ô¸€	à˜1 QÑ'€òò(&òP%óN	òXSðt ˆzÒÙ…Fð rD   