Ë
    ßÿ~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eZdZdZd	Zej$                  j'                  d
d«      ZdedœZd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„Zedk(  rkddlZdZ ejB                  dd D ]I  Z"e"jG                  d«      r	  e$e"jK                  dd«      d   «      Z Œ1e"jO                  «       sŒB e$e"«      Z ŒK  ee ¬«       yy# e&$ r Y Œ^w xY w)u³  
å†…è’™å�¤å’Œæž—æ ¼å°”æ–°åŒº - é€šçŸ¥å…¬å‘Š (TRS createPageHTML index_N.html åˆ†é¡µ)
CMS: TRS æ¹–åŒ—æ”¿åºœé›†çº¦åŒ–å¹³å�° (createPageHTML åˆ†é¡µ)
åˆ—è¡¨: a[title=å®Œæ•´æ ‡é¢˜] href=./202608/t20260812_1350281.html (æ ‡é¢˜åœ¨ a æ–‡æœ¬, æ—¥æœŸåœ¨ URL t202608)
è¯¦æƒ…: meta ArticleTitle/PubDate + div#view.TRS_UEDITOR æ­£æ–‡ HTML
åˆ†é¡µ: createPageHTML(æ€»é¡µæ•°,...) -> index_N.shtml
ç”¨æ³•: python3 crawl_hsxggyy_gggs.py [--pages=N | N]
é    N)Úurljoinu   å’Œæž—æ ¼å°”æ–°åŒº-é€šçŸ¥å…¬å‘Šzhttp://jyh.huangshi.gov.cnz&http://hlgena.huhhot.gov.cn/zwgk/tzgg/zhlgena.huhhot.gov.cnu	   å†…è’™å�¤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_hlgena_tzgg.pyÚclean_titler      sG   € Ü
�‰Ð6¸¸AºGÀÓD€AÜ
�‰ˆ~˜r 1Ó%€AÜ�6‰6�&˜#˜qÓ!×'Ñ'Ó)Ð)ó    c                 óò   — t        j                  d| xs d«      }|r[t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      }}}|d›d|d›d|d›�S y)	Nu-   (\d{4})[å¹´\-/. ](\d{1,2})[æœˆ\-/. ](\d{1,2})r   é   é   é   Ú04dú-Ú02d©r	   ÚsearchÚintÚgroup)ÚsÚmÚyÚmoÚds        r   Únormalize_dater    "   sk   € Ü
�	‰	ÐBÀAÂGÈÓL€AÙÜ�q—w‘w˜q“z“?¤C¨¯©°«
£O´S¸¿¹À»³_ˆqˆ2ˆØ�C�˜˜"˜S˜  1 S 'Ð*Ð*Ør   c                 ód  — t        |«      D ]o  }	 t        j                  | dt        d¬«      }d|_        |j
                  dk(  r|j                  c S |j
                  dv rdd l} |j                  d|d	z  z   «       ŒpŒq y # t        $ r' ||d
z
  k  rdd l} |j                  d|dz  z   «       Y Œ¢w xY w)Né   F)ÚtimeoutÚheadersÚverifyzutf-8éÈ   )i÷  iø  i­  r   é
   é   r   r   r   )
ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚtextÚtimeÚsleepÚ	Exception)ÚurlÚretriesÚiÚrespr0   s        r   Úfetchr7   )   sµ   € Ü�7‹^ò 3ˆð
	3Ü—<‘< ¨R¼ÈÔOˆDØ#ˆDŒMØ×Ñ 3Ò&Ø—y‘yÒ Ø×!Ñ! _Ñ4Û˜Z˜TŸZ™Z¨¨Q°©U©
Ô3Øð 5ð3ð øô ò 	3Ø�7˜Q‘;ŠÛ˜Z˜TŸZ™Z¨¨A°©E©	Ô2ùð	3ús   �>A?Á*A?Á?-B/Â.B/c                 ór   — t        j                  d| xs d«      }|rt        |j                  d«      «      S dS )NzcreatePageHTML\s*\(\s*(\d+)r   r   r   )Ú	html_textr   s     r   Úget_page_countr:   8   s0   € Ü
�	‰	Ð0°)²/¸rÓB€AÙŒ3ˆq�w‰w�q‹z‹?Ð& QÐ&r   c           
      ó  — g }| s|S t        «       }t        j                  d| t        j                  «      D �]O  }|j	                  d«      j                  «       }|j                  d«      s3|j                  d«      s"|j                  d«      s|j                  d«      rŒht        t        j                  dd|j	                  d	«      «      «      }t        |«      d
k  rŒ¦||v rŒ«|j                  |«       t        j                  d|«      }|sŒÕ|j	                  d	«      d d
 |j	                  d	«      d
d |j	                  d	«      dd }
}	}|› d|	› d|
› �}|j                  d«      st        ||«      n|}|j                  ||||dœ«       �ŒR |S )Nz$<a[^>]*href="([^"]+)"[^>]*>(.*?)</a>r   Ú
javascriptú#zhttp://www.zhttps://www.ú<[^>]+>r   r   é   z/(\d{6})/t(\d{8})_é   é   r   Úhttp)Útitler3   Úpub_dateÚhref_raw)Úsetr	   ÚfinditerÚDOTALLr   r   Ú
startswithr   r
   ÚlenÚaddr   r   Úappend)r9   Úbase_urlÚitemsÚseenr   ÚhrefrC   Údmr   r   r   rD   Ú
detail_urls                r   Úextract_list_itemsrS   <   so  € Ø€EÙØˆÜ‹5€DÜ�[‰[Ø/Ø”2—9‘9óó bˆð �w‰w�q‹z×ÑÓ!ˆà�?‰?˜<Ô(¨D¯O©O¸CÔ,@ÀDÇOÁOÐTaÔDbÐfj×fuÑfuð  wEô  gFØÜœBŸF™F :¨r°1·7±7¸1³:Ó>Ó?ˆÜˆu‹:˜Š>ØØ�4‰<ØØ�‰�Œä�Y‰YÐ,¨dÓ3ˆÙØØ—8‘8˜A“;˜r �? B§H¡H¨Q£K°°!Ð$4°b·h±h¸q³kÀ!ÀAÐ6Fˆqˆ2ˆØ�S˜˜"˜˜Q˜q˜c�?ˆØ48·O±OÀFÔ4K”W˜X tÔ,ÐQUˆ
Ø�‰˜u¨ZÀXÐ[_Ñ`Öað)bð* €Lr   c           	      óR  ‡‡— t        | «      }|sy d}t        j                  d|«      }|rt        |j	                  d«      «      }|sdt        j                  d|t        j
                  «      }|r=t        t        j                  dd|j	                  d«      j                  «       «      «      }d}t        j                  d|«      }|rt        |j	                  d«      «      }dŠt        j                  d|t        j
                  «      }|s%t        j                  d|t        j
                  «      }|r`|j	                  d«      }t        j                  d	|«      }|r|d |j                  «       d
z    Šn |j                  d«      }|dk7  r|d |d
z    n|Št        j                  dd‰t        j                  t        j                  z  ¬«      Št        j                  dd‰t        j                  t        j                  z  ¬«      Šg }t        j                  d‰«      D ]Ý  }|j	                  d«      j                  «       t        |j	                  d«      «      }
}	t        j                  d|	t        j                  «      sŒb|	j                  d«      r|	n)|	j                  d«      r	t        |	z   nt!        t"        |	«      Št%        ˆfd„|D «       «      rŒ´|j'                  |
xs |	j)                  d«      d   ‰dœ«       Œß d„ }t        j                  d|‰«      Št        j                  d|‰«      Št        j                  dd‰t        j                  t        j                  z  ¬«      Št        j                  dd‰«      Št        j                  dd‰«      Š|rDt%        ˆfd„|D «       «      }|s.dj+                  d„ |D «       «      }‰j-                  «       d z   |z   Št/        t        j                  d!d‰«      j                  «       «      }d"‰v }d#‰v xs d$‰v }|d%k  r|s|s	|s|d|g d&œS |‰||d&œS )'Nr   z/<meta\s+name="ArticleTitle"\s+content="([^"]*)"r   z<title>(.*?)</title>u   [-_â€”]\s*.*$z*<meta\s+name="PubDate"\s+content="([^"]*)"zA<div[^>]+(?:id|class)="?[^"]*view[^"]*TRS_UEDITOR[^"]*"[^>]*>(.*)z<div[^>]+id="content"[^>]*>(.*)zs</div>\s*<!--|</div>\s*</div>\s*(?:<div[^>]+class="[^"]*(?:footer|share|print)|<ul[^>]+class="[^"]*(?:share|print))r@   z</div>éÿÿÿÿz<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z,<a[^>]*href="([^"]+)"[^>]*>([^<]{0,120})</a>r   z0\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|7z|et|dps)$rB   ú/c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w©r3   N© )Ú.0ÚaÚabs_urls     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>}   s   øè ø€ Ò9¨q�q˜‘x 7Õ*Ñ9ùs   ƒ)Únamer3   c                 óÌ  — | j                  d«      j                  «       }|j                  d«      s"|j                  d«      s|j                  d«      r| j                  d«      S |j                  d«      r$| j                  d«      j                  |d|z   «      S | j                  d«      j                  ||j                  d«      rt        |z   «      S t        t        |«      «      S )	Nr   rB   r<   r=   r   z//zhttp:rW   )r   r   rI   ÚreplaceÚBASE_URLr   Ú	LIST_BASE)r   rP   s     r   Úabs_linkzparse_detail.<locals>.abs_link   s°   € Ø�w‰w�q‹z×ÑÓ!ˆØ�?‰?˜6Ô" d§o¡o°lÔ&CÀtÇÁÐWZÔG[Ø—7‘7˜1“:ÐØ�?‰?˜4Ô Ø—7‘7˜1“:×%Ñ% d¨G°d©NÓ;Ð;Ø�w‰w�q‹z×!Ñ! $¸4¿?¹?È3Ô;O¬°4©ÓnÐnÔU\Ô]fÐhlÓUmÓnÐnr   zhref="([^"]+)"zsrc="([^"]+)"zI<div[^>]*class="[^"]*(share|ewm|qrcode|print|bshare)[^"]*"[^>]*>.*?</div>z
<p>\s*</p>z<p[^>]*>z<p>c              3   ó,   •K  — | ]  }|d    ‰v –— Œ y­wrY   rZ   )r[   r\   Ú	body_htmls     €r   r^   zparse_detail.<locals>.<genexpr>Œ   s   øè ø€ Ò:°�a˜‘h )Ô+Ñ:ùs   ƒc              3   ó`   K  — | ]&  }d |d   › dt        j                  |d   «      › d�–— Œ( y­w)z<p><a href="r3   z">r_   z</a></p>N)Úhtml_modÚescape)r[   r\   s     r   r^   zparse_detail.<locals>.<genexpr>Ž   s3   è ø€ ÒmÐcd ¨a°©h¨Z°r¼(¿/¹/È!ÈFÉ)Ó:TÐ9UÐU]Ô^Ñmùs   ‚,.ú
r>   z<imgz<iframeÚvideor(   )rC   ÚcontentrD   Úattachments)r7   r	   r   r   r   rH   r
   r   r    ÚstartÚfindÚSÚIrG   rI   rb   r   rc   ÚanyrL   ÚsplitÚjoinÚrstriprJ   )r3   r9   rC   r   rD   ÚrawÚcutÚendÚattsrP   r_   rd   Úhas_attÚatt_htmlÚtext_lenÚhas_imgÚ	has_videor]   rf   s                    @@r   Úparse_detailr   X   s�  ù€ Ü�c“
€IÙØØ€EÜ
�	‰	ÐDÀiÓP€AÙÜ˜AŸG™G A›JÓ'ˆÙÜ�I‰IÐ-¨y¼"¿)¹)ÓDˆÙÜ¤§¡Ð'7¸¸Q¿W¹WÀQ»Z×=MÑ=MÓ=OÓ PÓQˆEØ€HÜ
�	‰	Ð?ÀÓK€AÙÜ! !§'¡'¨!£*Ó-ˆà€IÜ
�	‰	ÐVÐXaÔce×clÑclÓm€AÙÜ�I‰IÐ8¸)ÄRÇYÁYÓOˆÙØ�g‰g�a‹jˆÜ�i‰ið  Oð  QTó  UˆÙØÐ,˜SŸY™Y›[¨1™_Ð-‰Ià—(‘(˜8Ó$ˆCØ),°ª˜˜H˜S 1™W™¸ˆIÜ—‘Ð3°R¸Ì"Ï$É$ÔQS×QUÑQUÉ+ÔV€IÜ—‘Ð1°2°yÌÏÉÌrÏtÉtÉÔT€Ià€DÜ�[‰[ÐHÈ)ÓTò SˆØ—W‘W˜Q“Z×%Ñ%Ó'¬°Q·W±W¸Q³ZÓ)@ˆdˆÜ�9‰9ÐHÈ$ÔPR×PTÑPTÕUØ"Ÿo™o¨fÔ5‘dÈtÏÉÐ_bÔOc¼HÀtºOÔipÔqzð  }Aó  jBˆGÜÓ9°DÔ9Õ9Ø—‘ TÒ%@¨T¯Z©Z¸«_¸RÑ-@ÈÑQÕRðSòoô —‘Ð(¨(°IÓ>€IÜ—‘Ð'¨°9Ó=€IÜ—‘ÐcÐegÐirÔz|×z~Ñz~ô  BD÷  BFñ  BFñ  {Fô  G€IÜ—‘�} b¨)Ó4€IÜ—‘�{ E¨9Ó5€IÙÜÓ:°TÔ:Ó:ˆÙØ—w‘wÑmÐhlÔmÓmˆHØ!×(Ñ(Ó*¨TÑ1°HÑ<ˆIÜ”2—6‘6˜* b¨)Ó4×:Ñ:Ó<Ó=€HØ˜	Ð!€GØ˜YÐ&Ò>¨'°YÐ*>€IØ�!‚|™G©I¹dØ¨2¸8ÐTVÑWÐWØ y¸hÐW[Ñ\Ð\r   c                 óø  — t         |d   |d   | d   xs |d   | d   xs |d   | d   | d   xs 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)Nr3   rC   rD   rl   r   iô  u   çŽ¯å¢ƒä¿�æŠ¤)	Ú	site_nameÚ
source_urlÚpage_urlrC   Úpublish_daterl   Ú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 (?,?,?,?,?,?,?,?,?)r�   r‚   rƒ   r„   r…   r†   r‡   )Ú	SITE_NAMEÚosÚpathÚbasenameÚ__file__Úsqlite3Úconnectr   ÚexecuteÚcursorÚcommitr2   Úclose)ÚdetailÚitÚrowÚconnÚcs        r   Ú_storer™   —   sF  € äØ˜‘iØ�u‘IØ˜‘Ò/ B w¡KØ˜zÑ*Ò<¨b°©nØ˜)Ñ$Ø˜9Ñ%Ò+¨¨T¨cÐ2Ø"Ü—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C- Ã-	C9Ã8C9r   c                 óú  — dx}}t        «       }t        d| dz   «      D �]A  }|dk(  rt        t        «      }nt        t        › d|› d�«      }|s �nt        |t        «      }|s nþ|D ]½  }|d   |v rŒ|j                  |d   «       |d   r|d   t        k  rŒ1t        |d   «      }|sŒB|j                  d«      s|d   |d   d	|d   d
œ}|d   xs |d   |d<   |j                  d«      xs |d   |d<   t        ||«       |d   r|dz  }n|dz  }t        j                  d«       Œ¿ t        dt        › d|› dt        |«      › d�d¬«       t        j                  d«       �ŒD t        dt        › d|› d|› d�«       y )Nr   r   Úindex_z.htmlr3   rD   rl   rC   r   )rC   r„   rl   rD   r„   g      ð?ú[z] Pz: z itemsT)Úflushr   z
] Result: z	 stored, z skipped)rF   r)   r7   ÚLIST_URLrc   rS   rK   ÚCUTOFFr   r+   r™   r0   r1   Úprintr‰   rJ   )	ÚpagesÚstoredÚskippedÚ	seen_urlsÚpager9   rN   r•   r”   s	            r   Úcrawlr¦   ¯   s�  € ØÐ€FˆWÜ“€IÜ�a˜ ™Ó#ó ˆØ�1Š9Üœh›‰Iä¤ ¨6°$°°uÐ=Ó>ˆIÙÚÜ" 9¬iÓ8ˆÙÙØò 	ˆBØ�%‰y˜IÑ%ØØ�M‰M˜"˜U™)Ô$Ø�j’> R¨
¡^´fÒ%<ØÜ! " U¡)Ó,ˆFÙØØ—:‘:˜iÔ(Ø#% g¡;ÀÀ:ÁÐ[]ÐkmÐnxÑkyÑz�Ø$ W™oÒ<°°G±ˆF�7‰OØ%+§Z¡Z°Ó%?Ò%QÀ2ÀjÁ>ˆF�>Ñ"Ü�6˜2ÔØ�iÒ Ø˜!‘‘à˜1‘�Ü�J‰J�s�Oð%	ô& 	�”)�˜C ˜v R¬¨E«
 |°6Ð:À$ÕGÜ�
‰
�1Žð=ô> 
ˆAŒiˆ[˜
 6 (¨)°G°9¸HÐ
EÕFr   Ú__main__z--pages=ú=)r¡   )r(   )r   )(Ú__doc__r	   ÚsysrŠ   ÚjsonÚhtmlrh   Úurllib.parser   r*   rŽ   r‰   rb   rž   rc   ÚDOMAINÚGROUPrŸ   Úenvironr+   r   r,   r   r    r7   r:   rS   r   r™   r¦   Ú__name__r0   Ú_MAX_PGÚargvr\   rI   r   rs   Ú
ValueErrorÚisdigitrZ   r   r   ú<module>r¶      s  ðñ÷ +× *Ó *Ý  ß à-€	Ø'€Ø3€Ø€	Ø	€Ø€Ø	€Ø
�*‰*�.‰.˜Ð$5Ó
6€ð DØñ€ò
*ò
óò'òò8=]ò~ó0"GðH ˆzÒÛØ€GØ�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#ðÙ˜aŸg™g c¨1›o¨aÑ0Ó1‘ð �Y‰Y�[Ù˜!“f‰Gðñ 
�Öð øð ò Ùðús   ÂCÃC'Ã&C'