Ë
    ßÿ~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•  
é»„çŸ³ç»�æµŽæŠ€æœ¯å¼€å�‘åŒºÂ·é“�å±±åŒº - å…¬å‘Šå…¬ç¤º
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.cnz7http://jyh.huangshi.gov.cn/pub/hsjjjskfq/xxgk/zce/gsgg/zjyh.huangshi.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_hsjjjskfq_gsgg.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                 ó  — 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   r   r   )
ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚtextÚ	ExceptionÚtimeÚsleep)ÚurlÚretriesÚiÚrespr/   s        r   Úfetchr5   )   sƒ   € Ü�7‹^ò +ˆð	+Ü—<‘< ¨R¼ÈÔOˆDØ#ˆDŒMØ×Ñ 3Ò&Ø—y‘yÒ ð 'ð	+ð øô ò 	+Ø�7˜Q‘;ŠÛ˜Z˜TŸZ™Z¨œ]ùð	+ús   �>AÁ'A>Á=A>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_countr8   5   s0   € Ü
�	‰	Ð0°)²/¸rÓB€AÙŒ3ˆq�w‰w�q‹z‹?Ð& QÐ&r   c           
      óæ  — g }| s|S t        «       }t        j                  d| t        j                  «      D �]7  }|j	                  d«      j                  «       |j	                  d«      j                  «       }}t        |«      xs/ t        t        j                  dd|j	                  d«      «      «      }t        |«      dk  rŒ�||v rŒ’|j                  |«       t        j                  d|«      }d}	|rF|j	                  d«      d d |j	                  d«      dd	 |j	                  d«      d	d
 }}}
|
› d|› d|› �}	|j                  d«      st        ||«      n|}|j                  |||	|dœ«       �Œ: |S )Nz8<a[^>]*href="([^"]+)"[^>]*title="([^"]*)"[^>]*>(.*?)</a>r   r   ú<[^>]+>r   r   é   z/(\d{6})/t(\d{8})_é   é   r   Úhttp)Útitler1   Úpub_dateÚhref_raw)Úsetr	   ÚfinditerÚDOTALLr   r   r   r
   ÚlenÚaddr   Ú
startswithr   Úappend)r7   Úbase_urlÚitemsÚseenr   ÚhrefÚ
title_attrr?   Údmr@   r   r   r   Ú
detail_urls                 r   Úextract_list_itemsrP   9   sT  € Ø€EÙØˆÜ‹5€DÜ�[‰[ØCØ”2—9‘9óó bˆð Ÿ7™7 1›:×+Ñ+Ó-¨q¯w©w°q«z×/?Ñ/?Ó/AˆjˆÜ˜JÓ'ÒZ¬;´r·v±v¸jÈ"ÈaÏgÉgÐVWËjÓ7YÓ+ZˆÜˆu‹:˜Š>ØØ�4‰<ØØ�‰�Œä�Y‰YÐ,¨dÓ3ˆØˆÙØ—x‘x “{ 2 A�¨¯©°«°A°aÐ(8¸"¿(¹(À1»+ÀaÈÐ:J�1ˆrˆAØ˜˜A˜b˜T  1 #�ˆHØ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)$r>   ú/c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w©r1   N© )Ú.0ÚaÚabs_urls     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>w   s   øè ø€ Ò9¨q�q˜‘x 7Õ*Ñ9ùs   ƒ)Únamer1   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   r>   Ú
javascriptú#r   z//zhttp:rT   )r   r   rG   ÚreplaceÚBASE_URLr   Ú	LIST_BASE)r   rL   s     r   Úabs_linkzparse_detail.<locals>.abs_linky   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rV   rW   )rX   rY   Ú	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="r1   z">r\   z</a></p>N)Úhtml_modÚescape)rX   rY   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Úvideoé   )r?   Úcontentr@   Úattachments)r5   r	   r   r   r   rD   r
   r   r    ÚstartÚfindÚSÚIrC   rG   ra   r   rb   ÚanyrH   ÚsplitÚjoinÚrstriprE   )r1   r7   r?   r   r@   ÚrawÚcutÚendÚattsrL   r\   rc   Úhas_attÚatt_htmlÚtext_lenÚhas_imgÚ	has_videorZ   re   s                    @@r   Úparse_detailr   R   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)Nr1   r?   r@   rl   r   iô  u   çŽ¯å¢ƒä¿�æŠ¤)	Ú	site_nameÚ
source_urlÚpage_urlr?   Ú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Úcommitr.   Ú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 �]+  }|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  }Œ¤|dz  }Œª t        dt        › d|› dt        |«      › d�d¬«       t        j                  d«       �Œ. t        dt        › d|› d|› d�«       y )Nr   r   Úindex_z.shtmlr1   r@   rl   r?   r   )r?   r„   rl   r@   r„   ú[z] Pz: z itemsT)Úflushg333333Ó?z
] Result: z	 stored, z skipped)rB   r'   r5   ÚLIST_URLrb   rP   rF   ÚCUTOFFr   r)   r™   Úprintr‰   rE   r/   r0   )	ÚpagesÚstoredÚskippedÚ	seen_urlsÚpager7   rJ   r•   r”   s	            r   Úcrawlr¦   ©   s’  € ØÐ€FˆWÜ“€IÜ�a˜ ™Ó#ó ˆØ�1Š9Üœh›‰Iä¤ ¨6°$°°vÐ>Ó?ˆ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‘‘ð#	ô$ 	�”)�˜C ˜v R¬¨E«
 |°6Ð:À$ÕGÜ�
‰
�3Žð;ô< 
ˆAŒiˆ[˜
 6 (¨)°G°9¸HÐ
EÕFr   Ú__main__z--pages=ú=)r¡   )r   )r   )(Ú__doc__r	   ÚsysrŠ   ÚjsonÚhtmlrg   Úurllib.parser   r(   rŽ   r‰   ra   rž   rb   ÚDOMAINÚGROUPrŸ   Úenvironr)   r   r*   r   r    r5   r8   rP   r   r™   r¦   Ú__name__r/   Ú_MAX_PGÚargvrY   rG   r   rs   Ú
ValueErrorÚisdigitrW   r   r   ú<module>r¶      s  ðñ÷ +× *Ó *Ý  ß à*€	Ø'€ØD€Ø€	Ø	€Ø€Ø	€Ø
�*‰*�.‰.˜Ð$5Ó
6€ð DØñ€ò
*ò
ó
ò'òò2=]ò~ó0!GðF ˆzÒÛØ€GØ�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#ðÙ˜aŸg™g c¨1›o¨aÑ0Ó1‘ð �Y‰Y�[Ù˜!“f‰Gðñ 
�Öð øð ò Ùðús   ÂCÃC'Ã&C'