Ë
    ��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ZdZ	e	› d�Z
dZde	› d�d	œZd
ZdZdZd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uï   
å�—é™µåŽ¿ç”Ÿæ€�çŽ¯å¢ƒåˆ†å±€ - è¡Œæ”¿å®¡æ‰¹ (crawl_nlx_xzsp.py)
èŠœæ¹–å¸‚æ”¿åºœç½‘ç«™ç¾¤CMS
API: GET /wuhu/site/label/8888?labelName=publicInfoList (åˆ—è¡¨)
     GET /wuhu/site/label/8888?labelName=publicContentDetail&isJson=true (è¯¦æƒ…)
é    NÚnlx_xzspzhttps://www.nlx.gov.cnz/wuhu/site/label/8888z/root/search.dbz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z7/public/column/6605271?type=4&catId=7092673&action=list)z
User-AgentÚRefererÚ6605271Ú7092673Ú6787891c                 óŠ  — dt         t        d| dddddddt        dd	œ}d
j                  d„ |j	                  «       D «       «      }t
        j                  j                  t        › d|› �t        ¬«      }t
        j                  j                  |d¬«      }t        j                  |j                  «       j                  d«      «      S )zFetch one page of article listÚpublicInfoListé   Útruez
yyyy-MM-ddé2   é   ÚlistÚ )Ú	labelNameÚsiteIdÚorganIdÚpageSizeÚ	pageIndexÚisDateÚ
dateFormatÚlengthÚtypeÚactionÚisJsonÚisRelÚcatIdÚcatalogTypeú&c              3   óª   K  — | ]K  \  }}t        |t        «      s-|› d t        j                  j	                  t        |«      «      › �n|› d |› �–— ŒM y­w©ú=N)Ú
isinstanceÚstrÚurllibÚrequestÚquote©Ú.0ÚkÚvs      ú#/root/gov_crawler/crawl_nlx_xzsp.pyú	<genexpr>zfetch_list.<locals>.<genexpr>*   s[   è ø€ ò /Ù�q˜!ô @JÈ!ÌSÔ?Q�Q�C�qœŸ™×-Ñ-¬c°!«fÓ5Ð6Ñ7ÐZ[ÐY\Ð\]Ð^_Ð]`ÐWaÓañ /ùs   ‚AAú?©Úheadersé   ©Útimeoutúutf-8)ÚSITE_IDÚORGAN_IDÚCAT_IDÚjoinÚitemsr$   r%   ÚRequestÚ	LABEL_URLÚHEADERSÚurlopenÚjsonÚloadsÚreadÚdecode)Ú
page_indexÚparamsÚqsÚreqÚresps        r+   Ú
fetch_listrF      sµ   € ð &ÜÜØØØØ"ØØØØØÜØñ€Fð  
�‰ñ /Ø%Ÿ|™|›~ô/ó 
/€Bä
�.‰.×
 Ñ
 ¤I ;¨a°¨tÐ!4¼gÐ
 Ó
F€CÜ�>‰>×!Ñ! #¨rÐ!Ó2€DÜ�:‰:�d—i‘i“k×(Ñ(¨Ó1Ó2Ð2ó    c                 ó¬  — d| ddœ}dj                  d„ |j                  «       D «       «      }	 t        j                  j	                  t
        › d|› �t        ¬«      }t        j                  j                  |d¬	«      }t        j                  |j                  «       j                  d
«      «      S # t        $ r}t        d| › d|› �«       Y d}~yd}~ww xY w)zFetch article detailÚpublicContentDetailr   )r   Ú	contentIdr   r   c              3   ó0   K  — | ]  \  }}|› d |› �–— Œ y­wr    © r'   s      r+   r,   zfetch_detail.<locals>.<genexpr>8   s   è ø€ Ò8¡  A�Q�C�q˜˜”*Ñ8ùs   ‚r-   r.   r0   r1   r3   z    Detail error for ú: N)r7   r8   r$   r%   r9   r:   r;   r<   r=   r>   r?   r@   Ú	ExceptionÚprint)Ú
content_idrB   rC   rD   rE   Úes         r+   Úfetch_detailrR   1   s»   € ð +ØØñ€Fð
 
�‰Ñ8¨¯©«Ô8Ó	8€BðÜ�n‰n×$Ñ$¬	 {°!°B°4Ð%8Ä'Ð$ÓJˆÜ�~‰~×%Ñ% c°2Ð%Ó6ˆÜ�z‰z˜$Ÿ)™)›+×,Ñ,¨WÓ5Ó6Ð6øÜò ÜÐ% j \°°A°3Ð7Ô8Üûðús   ®B B/ Â/	CÂ8CÃCc                 ó@  — | syt        j                  dd| t         j                  ¬«      } t        j                  dd| t         j                  ¬«      } t        t        j                  dd| «      j	                  «       «      }|dk  ryt        j                  dd„ | «      } | S )	zClean up HTML contentr   z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z<[^>]+>r0   z(src|href)=(["\'])(/[^"\']+)c                 óz   — | j                  d«      › d| j                  d«      › t        › | j                  d«      › �S )Né   r!   é   é   )ÚgroupÚBASE_URL)Úms    r+   ú<lambda>zclean_content.<locals>.<lambda>M   s1   € ˜qŸw™w q›z˜l¨!¨A¯G©G°A«J¨<¼°zÀ!Ç'Á'È!Ã*ÀÐN€ rG   )ÚreÚsubÚDOTALLÚlenÚstrip)ÚhtmlÚtext_lens     r+   Úclean_contentrd   B   s�   € áØÜ�6‰6Ð.°°DÄÇ	Á	ÔJ€DÜ�6‰6Ð,¨b°$¼b¿i¹iÔH€DÜ”2—6‘6˜* b¨$Ó/×5Ñ5Ó7Ó8€HØ�"‚}Øä�6‰6Ð1ÙNÐPTóV€Dà€KrG   c                  óŒ  — t        j                  d«       dt        j                  v } | rt	        d«       nt	        d«       t	        d«       g }d}t        d|dz   «      D ]Ü  }	 t        |«      }|j                  dg «      }|j                  d	d
«      }|j                  dd«      }||z   dz
  |z  }|D ]>  }|j                  |d   |d   |j                  dd«      |j                  dd«      dœ«       Œ@ t	        d|› d|› dt        |«      › dt        |«      › d�	«       ||k\  r n| r nt        j                  d«       ŒÞ t	        dt        |«      › d�«       t	        d«       d
d l}
|
j                  t        «      }|j!                  «       }|j#                  d«       |j%                  «        d
}d
}d
}t'        |«      D ]Ý  \  }}|j#                  d|d   f«       |j)                  «       d
   d
kD  r|dz  }Œ8t+        |d   «      }|re|j                  d «      rTt-        |d    «      }|r>	 |j#                  d!|d   ||d   t.        |d"   d d# f«       |j%                  «        |dz  }n|dz  }n|dz  }|d#z  d
k(  sŒ»t	        d%|› dt        |«      › d&|› d'|› d(|› �
«       Œß |j1                  «        t	        d)«       t	        d*t        |«      › �«       t	        d+|› �«       t	        d,|› �«       t	        d-|› �«       y # t        $ r}	t	        d|› d|	› �«       Y d }	~	 �ŒÜd }	~	ww xY w# t        $ r}	t	        d$|	› �«       Y d }	~	ŒÐd }	~	ww xY w).Nz/rootz--incrementalzMode: INCREMENTAL (page 1 only)z
Mode: FULLz$=== Phase 1: Collecting articles ===éc   rV   ÚdataÚtotalr   r   r
   rJ   ÚtitleÚpublishDater   Úlink)rP   ri   Úpublish_daterk   z  Page ú/rM   z items, z totalg333333Ó?z ERROR: z
=== Collected z articles ===z+
=== Phase 2: Fetching details & saving ===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 = ?rP   ÚcontentzjINSERT OR IGNORE INTO gov_raw (title, content, source_url, site_name, publish_date) VALUES (?, ?, ?, ?, ?)rl   é
   z    DB error: z  [z] inserted=z	 skipped=z empty=z
=== Done ===zTotal: z
Inserted: z	Skipped: zEmpty content: )ÚosÚchdirÚsysÚargvrO   ÚrangerF   ÚgetÚappendr`   ÚtimeÚsleeprN   Úsqlite3ÚconnectÚTEMP_DBÚcursorÚexecuteÚcommitÚ	enumerateÚfetchonerR   rd   Ú	SITE_NAMEÚclose)ÚincrementalÚall_articlesÚtotal_pagesÚpageÚresultr8   rh   Úper_pageÚitemrQ   ry   ÚconnÚcÚinsertedÚskippedÚemptyÚiÚartÚdetailrn   s                       r+   Úmainr’   Q   sw  € Ü‡H�HˆWÔØ!¤S§X¡XÐ-€KÙÜÐ/Õ0äˆlÔô 
Ð
0Ô1Ø€LØ€Kä�a˜ q™Ó)ò ˆð	Ü Ó%ˆFØ—J‘J˜v rÓ*ˆEØ—J‘J˜w¨Ó*ˆEØ—z‘z *¨bÓ1ˆHØ  8Ñ+¨aÑ/°HÑ<ˆKàò �Ø×#Ñ#Ø"& {Ñ"3Ø! '™]Ø$(§H¡H¨]¸BÓ$?Ø ŸH™H V¨RÓ0ñ	%õ ðô �G˜D˜6  ; -¨r´#°e³*°¸XÄcÈ,ÓFWÐEXÐX^Ð_Ô`à�{Ò"ÙÙÙÜ�J‰J�s�Oð-ô8 
ÐœS Ó.Ð/¨}Ð
=Ô>ô 
Ð
8Ô9ÛØ�?‰?œ7Ó#€DØ�‰‹€AØ‡I�Ið 	ô 
ð
 	‡K�K„Mà€HØ€GØ€Eä˜LÓ)ò f‰ˆˆ3Ø	�	‰	ÐEÈÈFÉÀ~ÔVØ�:‰:‹<˜‰?˜QÒØ�q‰LˆGØô ˜c ,Ñ/Ó0ˆÙ�f—j‘j Ô+Ü# F¨9Ñ$5Ó6ˆGÙð0Ø—I‘Ið EØ˜W™ w°°F±¼YÈÈNÑH[Ð\_Ð]_ÐH`Ðaôð —K‘K”MØ ‘M‘Hð ˜‘
‘à�Q‰JˆEàˆr‰6�Q‹;Ü�C˜�s˜!œC Ó-Ð.¨k¸(¸À9ÈWÈIÐU\Ð]bÐ\cÐdÕeð5fð8 	‡J�J„LÜ	ˆNÔÜ	ˆG”C˜Ó%Ð&Ð
'Ô(Ü	ˆJ�x�jÐ
!Ô"Ü	ˆI�g�YÐ
Ô Ü	ˆO˜E˜7Ð
#Õ$øôo ò 	Ü�G˜D˜6 ¨!¨Ð-Ô.Þûð	ûôP !ò 0Ü˜N¨1¨#Ð.×/Ñ/ûð0ús=   Á#B>K9Ä#K9Ä'K9È&<L"Ë9	LÌLÌLÌ"	MÌ+L>Ì>MÚ__main__)Ú__doc__r=   rp   rr   rw   r]   Úurllib.requestr$   r�   rZ   r:   r{   r;   r5   r6   r4   rF   rR   rd   r’   Ú__name__rL   rG   r+   ú<module>r—      s�   ðñ÷ /× .× .à€	Ø#€ØˆjÐ-Ð.€	Ø
€àPØ�ÐRÐSñ€ð
 €Ø	€Ø
€ò3ò2ò"ò\%ð~ ˆzÒÙ…Fð rG   