Ë
    *ç~jí  ã                   ó¾  — 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mZ ddl	Z	ddl
Z
dZdZdZdZdZd	Zej"                  j%                  d
d«      ZdedœZd„ Zdd„Zd„ Zd„ Zdd„Zedk(  rkddlZdZej:                  dd D ]I  Zej?                  d«      r	  e ejC                  dd«      d   «      ZŒ1ejG                  «       sŒB e e«      ZŒK  ee¬«       yy# e"$ r Y Œ^w xY w)uŸ  
å±±ä¸œå�Žé²�æ�’å�‡ - å…¬ç¤ºå…¬å‘Š (GSGG)
ç«™ç‚¹: www.hl-hengsheng.com/GSGG/index.html
CMS: é�™æ€� HTML (é™„ä»¶ä¸Šä¼ åˆ—è¡¨)
åˆ—è¡¨: a[href=../GSGG/2026-08-13/uuid.pdf] > div.news-item (æ ‡é¢˜ div.text-[#333333], æ—¥æœŸ 12/2026-08)
è¯¦æƒ…: æ— è¯¦æƒ…é¡µ â€” çº¯ PDF å¤–é“¾å…¬å‘Š (æ­£æ–‡ = æ ‡é¢˜ + URL å†…åµŒæ®µ)
åˆ†é¡µ: /GSGG/index.html?page=N (è·³é¡µ JS)
ç”¨æ³•: python3 crawl_hl-hengsheng_gsgg.py [--pages=N | N]
é    N)Úurljoinu   å�Žé²�æ�’å�‡-å…¬ç¤ºå…¬å‘Šzhttps://www.hl-hengsheng.comz,https://www.hl-hengsheng.com/GSGG/index.htmlzwww.hl-hengsheng.comu   ä¼�ä¸šz
2023-01-01ÚDB_PATHz/root/search.dbzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36)z
User-AgentÚRefererc                 ó°   — t        j                  dd| xs d«      } t        j                  dd| «      } t        j                  dd| «      j                  «       S )Nz$&middot;|&nbsp;|&#160;|\u200b|\ufeffÚ u   ^[â€¢Â·]\s*z\s+ú )ÚreÚsubÚstrip)Úts    ú,/root/gov_crawler/crawl_hl-hengsheng_gsgg.pyÚclean_titler      sG   € Ü
�‰Ð6¸¸AºGÀÓD€AÜ
�‰ˆ~˜r 1Ó%€AÜ�6‰6�&˜#˜qÓ!×'Ñ'Ó)Ð)ó    c                 ó  — t        |«      D ]D  }	 t        j                  | dt        d¬«      }d|_        |j
                  dk(  r|j                  c S ŒF y # t        $ r! ||dz
  k  rdd l} |j                  d«       Y Œqw xY w)	Né   F)ÚtimeoutÚheadersÚverifyzutf-8éÈ   é   r   é   )
ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚtextÚ	ExceptionÚtimeÚsleep)ÚurlÚretriesÚiÚrespr    s        r   Úfetchr&   "   sƒ   € Ü�7‹^ò +ˆð	+Ü—<‘< ¨R¼ÈÔOˆDØ#ˆDŒMØ×Ñ 3Ò&Ø—y‘yÒ ð 'ð	+ð øô ò 	+Ø�7˜Q‘;ŠÛ˜Z˜TŸZ™Z¨œ]ùð	+ús   �>AÁ'A>Á=A>c           
      óÔ  — g }| s|S t        «       }t        j                  d| t        j                  t        j                  z  «      D �]�  }|j                  d«      j                  «       |j                  d«      }}||v rŒ9|j                  |«       t        j                  d|t        j                  «      }d}|r/t        t        j                  dd|j                  d«      «      «      }|s#t        t        j                  dd|«      «      dd }t        j                  d	|«      }d}	|r8|j                  d«      j                  d«      |j                  d«      }}
|› d
|
› �}	|	s)t        j                  d|«      }|r|j                  d«      }	|j                  d«      r|nt        t        |«      }|j                  |xs t         j"                  j%                  |«      ||	|dœ«       �Œ  |S )u•   é™„ä»¶æ�¡ç›®: <a href="../GSGG/2026-08-13/uuid.pdf"> <div class="news-item"> <div>12</div><div>2026-08</div> <div class="text-[#333333]">æ ‡é¢˜</div>zr<a[^>]+href="([^"]*(?:GSGG|gsgg)/20\d{2}-\d{2}-\d{2}/[^"]+\.(?:pdf|doc|docx|xls|xlsx|zip|rar|wps))"[^>]*>(.*?)</a>r   r   z3class="[^"]*text-\[#333333\][^"]*"[^>]*>(.*?)</div>r   z<[^>]+>NéP   z0>(\d{1,2})</div>\s*<div[^>]*>(\d{4}-\d{2})</div>ú-z20\d{2}-\d{2}-\d{2}r   Úhttp)Útitler"   Úpub_dateÚhref_raw)Úsetr	   ÚfinditerÚDOTALLÚIÚgroupr   ÚaddÚsearchr   r
   ÚzfillÚ
startswithr   ÚLIST_URLÚappendÚosÚpathÚbasename)Ú	html_textÚitemsÚseenÚmÚhrefÚblockÚtmr+   Údmr,   ÚdayÚymÚdm2Úabs_urls                 r   Úextract_list_itemsrH   .   s›  € à€EÙØˆÜ‹5€DÜ�[‰[Ø}Ø”2—9‘9œrŸt™tÑ#ó%ó yˆð —g‘g˜a“j×&Ñ&Ó(¨!¯'©'°!«*ˆeˆØ�4‰<ØØ�‰�Œä�Y‰YÐMÈuÔVX×V_ÑV_Ó`ˆØˆÙÜ¤§¡ z°2°r·x±xÀ³{Ó CÓDˆEÙÜ¤§¡ z°2°uÓ =Ó>¸sÀÐCˆEä�Y‰YÐJÈEÓRˆØˆÙØ—h‘h˜q“k×'Ñ'¨Ó*¨B¯H©H°Q«K�ˆCØ˜˜Q˜s˜e�}ˆHÙÜ—)‘)Ð2°DÓ9ˆCÙØŸ9™9 Q›<�ØŸ/™/¨&Ô1‘$´w¼xÈÓ7NˆØ�‰˜uÒ>¬¯©×(8Ñ(8¸Ó(>ÀwÐ\dÐrvÑwÖxð3yð4 €Lr   c                 ó|  — t         j                  j                  | d   «      }dt        j                  | d   «      › d| d   › dt        j                  |«      › d�}t
        | d   | d   | d   | d   ||dd	 d
t         j                  j                  t        «      dœ	}t        j                  t        d¬«      }|j                  d«       |j                  «       }	 |j                  d|d   |d   |d   |d   |d   |d   |d   |d   |d   f	«       |j                  «        |j                  «        y# t        $ r Y Œw xY w)u5   çº¯ PDF å¤–é“¾å…¬å‘Š: æ­£æ–‡ = æ ‡é¢˜ + URL å†…åµŒæ®µr"   z<p>r+   z</p>
<p><a href="z">z</a></p>r,   Niô  u   çŽ¯å¢ƒä¿�æŠ¤)	Ú	site_nameÚ
source_urlÚpage_urlr+   Úpublish_dateÚcontentÚsummaryÚcategoryÚscript_nameé<   )r   zPRAGMA busy_timeout=60000z˜INSERT OR IGNORE INTO gov_raw (site_name, source_url, page_url, title, publish_date, content, summary, category, script_name) VALUES (?,?,?,?,?,?,?,?,?)rJ   rK   rL   rM   rN   rO   rP   rQ   )r9   r:   r;   Úhtml_modÚescapeÚ	SITE_NAMEÚ__file__Úsqlite3Úconnectr   ÚexecuteÚcursorÚcommitr   Úclose)ÚitÚfnameÚbodyÚrowÚconnÚcs         r   Ú_storerc   P   st  € ä�G‰G×Ñ˜R ™YÓ'€EØ”—‘  G¡Ó-Ð.Ð.@ÀÀEÁÀÈ2ÌhÏoÉoÐ^cÓNdÐMeÐemÐn€DäØ˜‘iØ�u‘IØ�G‘Ø˜:™ØØ˜˜�:Ø"Ü—w‘w×'Ñ'¬Ó1ñ
€Cô �?‰?œ7¨BÔ/€DØ‡L�LÐ,Ô-Ø�‰‹€AðØ	�	‰	ð gØ�Ñ˜s <Ñ0°#°j±/À3ÀwÁ<ÐQTÐUcÑQdÐfiÐjsÑftÐvyð  {Dñ  wEð  GJð  KUñ  GVð  X[ð  \iñ  Xjð  kô	lð 	�‰Œð 	‡J�J…Løô ò Ùðús   ÃAD/ Ä/	D;Ä:D;r   c                 óî  — dx}}t        «       }t        d| dz   «      D ]¼  }|dk(  rt        t        «      }nt        t        › d|› �«      }|s n�t	        |«      }|s n€|D ]@  }|d   |v rŒ|j                  |d   «       |d   r|d   t        k  rŒ1t        |«       |dz  }ŒB t        dt        › d|› dt        |«      › d	�d
¬«       t        j                  d«       Œ¾ t        dt        › d|› d|› d�«       y )Nr   r   z?page=r"   r,   ú[z] Pz: z itemsT)Úflushg333333Ó?z
] Result: z	 stored, z skipped)r.   r   r&   r7   rH   r3   ÚCUTOFFrc   ÚprintrU   Úlenr    r!   )ÚpagesÚstoredÚskippedÚ	seen_urlsÚpager<   r=   r]   s           r   Úcrawlro   k   s
  € ØÐ€FˆWÜ“€IÜ�a˜ ™Ó#ò ˆØ�1Š9Üœh›‰Iä¤ 
¨&°°Ð7Ó8ˆIÙÙÜ" 9Ó-ˆÙÙØò 	ˆBØ�%‰y˜IÑ%ØØ�M‰M˜"˜U™)Ô$Ø�*Š~ " Z¡.´6Ò"9ØÜ�2ŒJØ�a‰K‰Fð	ô 	�”)�˜C ˜v R¬¨E«
 |°6Ð:À$ÕGÜ�
‰
�3�ð'ô( 
ˆAŒiˆ[˜
 6 (¨)°G°9¸HÐ
EÕFr   Ú__main__z--pages=ú=)rj   )é   )r   )$Ú__doc__r	   Úsysr9   ÚjsonÚhtmlrS   Úurllib.parser   r   rW   rU   ÚBASE_URLr7   ÚDOMAINÚGROUPrg   Úenvironr   r   r   r   r&   rH   rc   ro   Ú__name__r    Ú_MAX_PGÚargvÚar6   ÚintÚsplitÚ
ValueErrorÚisdigit© r   r   ú<module>r…      s  ðñ÷ +× *Ó *Ý  ß à'€	Ø)€Ø9€Ø	€Ø€Ø	€Ø
�*‰*�.‰.˜Ð$5Ó
6€ð DØñ€ò
*ó

ò òDó6Gð2 ˆzÒÛØ€GØ�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#ðÙ˜aŸg™g c¨1›o¨aÑ0Ó1‘ð �Y‰Y�[Ù˜!“f‰Gðñ 
�Öð øð ò Ùðús   ÂCÃCÃC