Ë
    ¸¬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 dZe› d�Z	e› d�Z
de› d�d	œZd
ZdZej                  j                  ej                  j!                  e«      «      Zej                  j'                  de«       ddlmZ dej,                  v r1 eej,                  ej,                  j1                  d«      dz      «      ndZdd„Zd„ Zd„ Zd„ Zedk(  r e«        yy)uÔ   
szsnews.com (çŸ³å˜´å±±æ–°é—»ç½‘) é€šçŸ¥å…¬å‘Šçˆ¬è™« â€” çŽ¯è¯„å…¬ç¤º
CMS: å¤©é©¬CMS (Tianma, SPA+Vue)
API: GET /api/msite/web/index?sheet_id=1 â†’ 40æ�¡åˆ—è¡¨
     POST /api/msite/Subpage/details â†’ è¯¦æƒ…HTML
é    N)Údatetimezhttps://www.szsnews.comz/api/msite/web/index?sheet_id=1z/api/msite/Subpage/detailszoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36ú/)z
User-AgentÚRefererÚtenma01zx_eqlilÚ143)Úpush_to_searchdbz--pagesé   é   c                 ó  — 	 t        j                  t        t        d¬«      }d|_        |j                  «       }|j                  d«      dk7  rt        d|j                  d«      › �«       g S |j                  di «      j                  dg «      }|D ]G  }|j                  d	i «      }|j                  «       D ]   }|D ]  }|j                  d
g «      c c c S  Œ" ŒI g S # t        $ r}t        d|› �«       g cY d}~S d}~ww xY w)z@Fetch notification list (no pagination needed, returns 40 items)é   )ÚheadersÚtimeoutúutf-8ÚcodeéÈ   z[ERROR] List API code=ÚdataÚmodulesÚcolumnsÚlistz[ERROR] fetch_list: N)	ÚrequestsÚgetÚLIST_APIÚHEADERSÚencodingÚjsonÚprintÚvaluesÚ	Exception)	ÚpageÚrr   r   ÚmodÚcolsÚcol_listÚcolÚes	            ú)/root/gov_crawler/crawl_szsnews_notice.pyÚ
fetch_listr'      sø   € ðÜ�L‰Lœ¬7¸BÔ?ˆØˆŒ
Ø�v‰v‹xˆØ�8‰8�FÓ˜sÒ"ÜÐ*¨4¯8©8°FÓ+;Ð*<Ð=Ô>ØˆIØ—(‘(˜6 2Ó&×*Ñ*¨9°bÓ9ˆØò 	/ˆCØ—7‘7˜9 bÓ)ˆDØ ŸK™K›Mò /�Ø#ò /�CØŸ7™7 6¨2Ó.Ö.ñ/ñ/ð	/ð
 ˆ	øÜò ÜÐ$ Q CÐ(Ô)Ø�	ûðús+   ‚A)C Á,A(C ÃC Ã	C?Ã%C:Ã4C?Ã:C?c                 óh  — 	 t        j                  t        | t        t        dœt
        d¬«      }d|_        |j                  «       }|j                  d«      dk7  r!t        d|j                  d«      › d| › �«       y	|j                  d
i «      S # t        $ r}t        d| › d|› �«       Y d	}~y	d	}~ww xY w)zFetch article detail via POST)ÚidÚ	componentÚinstance_idr   )r   r   r   r   r   r   z[ERROR] Detail API code=z for article Nr   z[ERROR] fetch_detail(z): )r   ÚpostÚ
DETAIL_APIÚ	COMPONENTÚINSTANCE_IDr   r   r   r   r   r   )Ú
article_idr    r   r%   s       r&   Úfetch_detailr1   0   s®   € ðÜ�M‰Mœ*ØÜ"Ü&ñ,
ô  Bô	(ˆð
 ˆŒ
Ø�v‰v‹xˆØ�8‰8�FÓ˜sÒ"ÜÐ,¨T¯X©X°fÓ-=Ð,>¸mÈJÈ<ÐXÔYØØ�x‰x˜ Ó#Ð#øÜò ÜÐ% j \°°Q°CÐ8Ô9Üûðús   ‚A8B Á;B Â	B1ÂB,Â,B1c                 ó  — | syt        j                  dd| t         j                  ¬«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      }|j                  d	d
«      j                  dd«      j                  dd«      j                  dd«      j                  dd«      }t        j                  dd
|«      }t        j                  dd|«      }|j	                  «       }|S )zKClean inline styles and strip HTML tags for plain text, preserve paragraphsÚ z<style[^>]*>.*?</style>)Úflagsz</p>\s*<p[^>]*>z

z	<br\s*/?>ú
z<[^>]+>z&nbsp;ú z&amp;ú&z&lt;ú<z&gt;ú>z&quot;ú"z[ \t]+z\n{3,})ÚreÚsubÚDOTALLÚreplaceÚstrip)Úhtml_contentÚtexts     r&   Ú
clean_htmlrB   B   sÔ   € áØä—6‘6Ð4°b¸,ÌbÏiÉiÔX€Lä—6‘6Ð,¨f°lÓC€Lä—6‘6˜,¨¨lÓ;€Lä�6‰6�*˜b ,Ó/€Dà�<‰<˜ #Ó&×.Ñ.¨w¸Ó<×DÑDÀVÈSÓQ×YÑYÐZ`ÐbeÓf×nÑnÐowÐy|Ó}€Dä�6‰6�)˜S $Ó'€DÜ�6‰6�)˜V TÓ*€DØ�:‰:‹<€DØ€Kó    c            
      óô  — t        «       } | s t        d«       t        j                  d«       t        dt	        | «      › d�«       t
        dkD  r| d t
        dz   } g }t        | «      D �]0  \  }}|j                  d«      }|j                  dd	«      j                  «       }|j                  d
d«      }|r$t        j                  |«      j                  d«      nd	}|j                  dd	«      }t        › d|› �}	|sŒ’t        |«      }
|
€Œ |
j                  dd	«      }t        |«      }t	        |«      dk  r|r|d|d d z   z  }|s|
j                  dd«      }|j                  |	|||d|	dœ«       t        d|dz   › d|d d › d�«       t!        j"                  d«       �Œ3 |rQt%        |«      }t'        |t(        «      r|j                  dd«      n
t	        |«      }t        dt	        |«      › d�«       y t        d«       y )Nz[ERROR] No items fetchedr	   z[INFO] List fetched: z itemsr   é
   r0   Útitler3   Úpublish_timez%Y-%m-%dÚsourcez	/article/Úcontentiô  u   

[åµŒå…¥å†…å®¹]
iÐ  u   çŸ³å˜´å±±å¸‚æ–°é—»ä¼ åª’ä¸­å¿ƒu   çŸ³å˜´å±±æ–°é—»ç½‘-é€šçŸ¥å…¬å‘Š)ÚurlrF   rI   Úpub_dateÚ	site_nameÚ
source_urlz  [z] é(   z...g333333Ó?Úimportedu   
[DONE] å®Œæˆ�: u
    æ�¡å¤„ç�†u   [DONE] æ— æ•°æ�®)r'   r   ÚsysÚexitÚlenÚ	MAX_PAGESÚ	enumerater   r?   r   ÚfromtimestampÚstrftimeÚBASEr1   rB   ÚappendÚtimeÚsleepr   Ú
isinstanceÚdict)ÚitemsÚbatchÚidxÚitemr0   rF   Ú
publish_tsÚpublish_daterH   rJ   ÚdetailÚraw_htmlrI   ÚresultrO   s                  r&   Úmainrf   V   sö  € Ü‹L€EÙÜÐ(Ô)Ü�‰�Œä	Ð!¤# e£* ¨VÐ
4Ô5ô �1‚}Ø�o”y 2‘~Ð&ˆà€Eä˜uÓ%ó &‰	ˆˆTØ—X‘X˜lÓ+ˆ
Ø—‘˜ "Ó%×+Ñ+Ó-ˆØ—X‘X˜n¨aÓ0ˆ
ÙR\”x×-Ñ-¨jÓ9×BÑBÀ:ÔNÐbdˆØ—‘˜( BÓ'ˆÜ��i 
˜|Ð,ˆáØô ˜jÓ)ˆØˆ>Øð —:‘:˜i¨Ó,ˆÜ˜XÓ&ˆô ˆw‹<˜#Ò¡(ØÐ-°¸¸$°Ñ?Ñ?ˆGñ Ø—Z‘Z Ð*JÓKˆFà�‰ØØØØ$Ø:Øñ
ô 	ô 	��C˜‘E�7˜"˜U 3 B˜Z˜L¨Ð,Ô-Ü�
‰
�3ŽðM&ñP Ü! %Ó(ˆÜ0:¸6Ä4Ô0H�6—:‘:˜j¨!Ô,ÌcÐRWËjˆÜÐ!¤# e£* ¨ZÐ8Õ9äÐ Õ!rC   Ú__main__)r	   )Ú__doc__r   r   rP   Úosr;   rY   r   rW   r   r-   r   r.   r/   ÚpathÚdirnameÚabspathÚ__file__ÚCRAWLER_DIRÚinsertÚcrawler_libr   ÚargvÚintÚindexrS   r'   r1   rB   rf   Ú__name__© rC   r&   ú<module>rv      sé   ðñ÷ )× (× (Ý à €ØˆVÐ2Ð3€ØˆvÐ/Ð0€
ð DØ��qˆzñ€ð €	Ø€à�g‰g�o‰o˜bŸg™gŸo™o¨hÓ7Ó8€Ø ‡�‡���;Ô Ý (à<EÈÏÉÑ<Q‰C�—‘˜Ÿ™Ÿ™¨	Ó2°QÑ6Ñ7Ô8ÐWX€	óò(ò$ò(;"ðz ˆzÒÙ…Fð rC   