Ë
    ¬ç~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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–  
æ€€åŒ–å¸‚æ´ªæ±ŸåŒº - é€šçŸ¥å…¬å‘Š
ç«™ç‚¹: hjq.huaihua.gov.cn/hjq/c115285/list.shtml
CMS: æ¹–å�— TRS (createPageHTML åˆ†é¡µ list_N.shtml)
åˆ—è¡¨: a[title=å®Œæ•´æ ‡é¢˜] href=202608/uuid.shtml (æ—¥æœŸåœ¨ URL 202608)
è¯¦æƒ…: meta ArticleTitle/PubDate + div#fontzoom æ­£æ–‡ HTML
åˆ†é¡µ: createPageHTML('paging',25,1,'list','shtml',500) -> list_N.shtml
ç”¨æ³•: python3 crawl_hjq_huaihua_tzgg.py [--pages=N | N]
é    N)Úurljoinu   æ´ªæ±ŸåŒº-é€šçŸ¥å…¬å‘Šzhttp://hjq.huaihua.gov.cnz0http://hjq.huaihua.gov.cn/hjq/c115285/list.shtmlz&http://hjq.huaihua.gov.cn/hjq/c115285/zhjq.huaihua.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_hjq_huaihua_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                 ó  — 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                 óp   — t        j                  d| xs d«      }|rt        |j                  d«      «      S y)NzKcreatePageHTML\s*\([^,]*,\s*\d+,\s*\d+,\s*'(\w+)'\s*,\s*'(\w+)'\s*,\s*(\d+)r   r   r   r   )Ú	html_textr   s     r   Úget_page_countr8   6   s2   € Ü
�	‰	Ð`ÐbkÒbqÐoqÓr€AÙÜ�1—7‘7˜1“:‹ÐØr   c           
      óÐ  — g }| s|S t        «       }t        j                  d| t        j                  «      D �],  }|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|«      sŒºt        j                  d	|«      }d}	|r$|j	                  d«      }
|
d d › d
|
dd › d
|
dd › �}	|j                  d«      st        ||«      n|}|j                  |||	|dœ«       �Œ/ |S )Nz8<a[^>]*href="([^"]+)"[^>]*title="([^"]*)"[^>]*>(.*?)</a>r   r   ú<[^>]+>r   r   é   z/c115285/\d{6}/z	/(\d{6})/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@   ÚymdÚ
detail_urls               r   Úextract_list_itemsrQ   <   sL  € Ø€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Ð+¨TÔ2ØÜ�Y‰Y�| TÓ*ˆØˆÙØ—(‘(˜1“+ˆCØ˜b˜q˜'˜ ! C¨¨! H :¨Q¨s°1°Q¨x¨jÐ9ˆ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="([^"]*)"z <div[^>]+id="fontzoom"[^>]*>(.*)z<div[^>]+id="conTxt"[^>]*>(.*)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>y   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:rU   )r   r   rG   ÚreplaceÚBASE_URLr   Ú	LIST_BASE)r   rL   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rW   rX   )rY   rZ   Ú	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)rY   rZ   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   rb   r   rc   ÚanyrH   ÚsplitÚjoinÚrstriprE   )r1   r7   r?   r   r@   ÚrawÚcutÚendÚattsrL   r]   rd   Úhas_attÚatt_htmlÚtext_lenÚhas_imgÚ	has_videor[   rf   s                    @@r   Úparse_detailr€   V   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Ü
�	‰	Ð5°yÄ"Ç)Á)ÓL€AÙÜ�I‰IÐ7¸ÄBÇIÁIÓNˆÙØ�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@   rm   r   iô  u   çŽ¯å¢ƒä¿�æŠ¤)	Ú	site_nameÚ
source_urlÚpage_urlr?   Úpublish_daterm   Ú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   Úlist_z.shtmlr1   r@   rm   r?   r   )r?   r…   rm   r@   r…   ú[z] Pz: z itemsT)Úflushg333333Ó?z
] Result: z	 stored, z skipped)rB   r'   r5   ÚLIST_URLrc   rQ   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ä¤ ¨5°°°fÐ=Ó>ˆ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Úhtmlrh   Úurllib.parser   r(   r�   rŠ   rb   rŸ   rc   ÚDOMAINÚGROUPr    Úenvironr)   r   r*   r   r    r5   r8   rQ   r€   rš   r§   Ú__name__r/   Ú_MAX_PGÚargvrZ   rG   r   rt   Ú
ValueErrorÚisdigitrX   r   r   ú<module>r·      s  ðñ÷ +× *Ó *Ý  ß à$€	Ø&€Ø=€Ø4€	Ø	€Ø€Ø	€Ø
�*‰*�.‰.˜Ð$5Ó
6€ð DØñ€ò
*ò
ó
òòò4;]òzó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'