Ë
    Ý±jì  ã                   ó^  — d Z ddlZddlZddlZddlZddlmZmZmZ ddlZddl	Z	ddlZ e	j                  e	j                  j                  «       dZdZ ej                  dd«      Z ej"                  ej$                  «       ed¬	«      z
  j'                  d
«      ZddiZd„ Zd„ Zd„ Zd„ Zdd„Zedk(  rzdej8                  v ZerdndZ e«         ede› de› �«        ej                  «       Z  ee¬«      \  Z!Z" ed e# ej                  «       e z
  d«      › d�«        ede!› de"› �«       yy)u®  
èŽ’åŽ¿äººæ°‘æ”¿åºœ-å…¬å‘Šå…¬ç¤º (www.juxian.gov.cn)
====================================
CMS: å¤§æ±‰ç‰ˆé€š (Hanweb) - JPage åŠ¨æ€�åˆ†é¡µ (CSRFä¿�æŠ¤)
åˆ—è¡¨: é¦–é¡µHTMLå†…åµŒXML datastore (45æ�¡), åˆ†é¡µéœ€JPage AJAX+CSRF
è¯¦æƒ…: /art/2026/6/8/art_163432_10410495.html, <div id="zoom"> å�«æ­£æ–‡

ç”¨æ³•:
    python3 crawl_juxian_gggs.py          # å…¨é‡�(ä»…é¦–é¡µ45æ�¡)
    python3 crawl_juxian_gggs.py --test   # æµ‹è¯• 5 æ�¡
é    N)ÚdatetimeÚ	timedeltaÚtimezoneu   èŽ’åŽ¿äººæ°‘æ”¿åºœ-å…¬å‘Šå…¬ç¤ºz?http://www.juxian.gov.cn/col/col163432/index.html?number=JU0023Ú	SEARCH_DBz/root/search.dbiG  )Údaysz%Y-%m-%dz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                  óÊ   — 	 t        j                  t        t        d¬«      } d| _        | j
                  S # t        $ r$}t        dt        |«      d d z   «       Y d }~y d }~ww xY w)Né   ©ÚheadersÚtimeoutúutf-8z  ! list fail: é<   )	ÚrequestsÚgetÚLIST_URLÚHEADERSÚencodingÚtextÚ	ExceptionÚprintÚstr)ÚrÚes     ú&/root/gov_crawler/crawl_juxian_gggs.pyÚ
fetch_listr      sT   € ðÜ�L‰Lœ¬7¸BÔ?ˆØˆŒ
Ø�v‰vˆøÜò ÜÐ¤# a£&¨¨" +Ñ-Ô.Üûðús   ‚25 µ	A"¾AÁA"c           	      ó„  — g }t        j                  d| t         j                  «      D �]”  }|j                  d«      }t        j                  d|«      }|st        j                  d|«      }|sŒF|j                  d«      }|j                  d«      s|j                  d«      rd|z   nd|z   }|j                  d	k\  r|j                  d	«      j                  «       n|j                  d	«      j                  «       }t        j                  d
|«      }|st        j                  d|«      }|r|j                  d«      }nnt        j                  d|xs d«      }	|	rPdt        |	j                  d«      «      t        |	j                  d	«      «      t        |	j                  d«      «      fz  nd}|j                  |||dœ«       �Œ— |S )z)Parse records from embedded XML datastorez&<record><!\[CDATA\[(.*?)\]\]></record>é   z)<a[^>]*href="([^"]*)"[^>]*title="([^"]*)"z&<a[^>]*href="([^"]*)"[^>]*>([^<]+)</a>Úhttpú/zhttp://www.juxian.gov.cnzhttp://www.juxian.gov.cn/é   z&<span class="time">(\d{4}-\d{2}-\d{2})z-<span class="time">\s*(\d{4}-\d{1,2}-\d{1,2})z!/art/(\d{4})/(\d{1,2})/(\d{1,2})/Ú z%04d-%02d-%02dé   )ÚtitleÚurlÚpub_date)
ÚreÚfinditerÚDOTALLÚgroupÚsearchÚ
startswithÚ	lastindexÚstripÚintÚappend)
ÚhtmlÚitemsÚrecÚrec_htmlÚa_mr$   r#   Údate_mr%   Ú_ums
             r   Ú
parse_listr7   #   s€  € à€Eä�{‰{ÐDÀdÌBÏIÉIÓVó IˆØ—9‘9˜Q“<ˆä�i‰iÐDÀhÓOˆÙÜ—)‘)ÐEÀxÓPˆCÙØØ�i‰i˜‹lˆØ�~‰~˜fÔ%Ø69·n±nÀSÔ6IÐ,¨sÒ2ÐOjÐmpÑOpˆCØ(+¯©¸Ò(:�—	‘	˜!“×"Ñ"Ô$ÀÇ	Á	È!Ã×@RÑ@RÓ@Tˆô
 —‘ÐDÀhÓOˆÙÜ—Y‘YÐOÐQYÓZˆFÙØ—|‘| A“‰Hô —)‘)Ð@À#Â)ÈÓLˆCáð )¬C°·	±	¸!³Ó,=¼sÀ3Ç9Á9ÈQÃ<Ó?PÔRUÐVY×V_ÑV_Ð`aÓVbÓRcÐ+dÒdØ$&ð à�‰˜u¨S¸hÑGÖHð5Ið6 €Ló    c                 ó�  — 	 t        j                  | t        d¬«      }d|_        |j                  }t        j                  d|t
        j                  «      }|r¿|j                  d«      }t        j                  dd|t
        j                  t
        j                  z  ¬«      }t        j                  d	d|t
        j                  t
        j                  z  ¬«      }t        j                  d
d|«      }t        j                  dd|«      }|j                  «       S y# t        $ r$}t        dt        |«      d d z   «       Y d }~yd }~ww xY w)Nr	   r
   r   zid="zoom"[^>]*>(.*?)</div>r   z<script[^>]*>.*?</script>r!   )Úflagsz<style[^>]*>.*?</style>z
<!--.*?-->z<meta[^>]*>z  ! detail fail: r   )r   r   r   r   r   r&   r*   r(   r)   ÚsubÚIr-   r   r   r   )r$   r   r0   ÚmÚcontentr   s         r   Úfetch_detailr?   D   sö   € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�v‰vˆä�I‰IÐ3°T¼2¿9¹9ÓEˆÙØ—g‘g˜a“jˆGä—f‘fÐ9¸2¸wÌbÏiÉiÔXZ×X\ÑX\ÉnÔ]ˆGÜ—f‘fÐ7¸¸WÌBÏIÉIÔVX×VZÑVZÉNÔ[ˆGä—f‘f˜]¨B°Ó8ˆGÜ—f‘f˜^¨R°Ó9ˆGØ—=‘=“?Ð"ØøÜò ÜÐ!¤C¨£F¨3¨B KÑ/Ô0Üûðús   ‚DD Ä	EÄ!E Å Ec                 ó’  — | sydd l }|j                  t        d¬«      }|j                  d«       |j                  d«       d\  }}| D ]¨  }	 |j                  dt        |j                  d«      xs d	d d
 |j                  dd	«      |j                  dd	«      |j                  d«      xs d	d d d	dt        j                  j                  t        «      f«       |j                  dkD  r|dz  }n|dz  }Œª |j                  dt        f«       |j                  «        |j                  «        ||fS # t        $ r}|dz  }Y d }~Œùd }~ww xY w)N©r   r   r   r   )r   zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALz‡INSERT OR REPLACE INTO gov_raw (site_name, title, page_url, content, publish_date, summary, tags, script_name) VALUES (?,?,?,?,?,?,?,?)r#   r!   iô  r$   r>   r%   é
   u   å…¬å‘Šå…¬ç¤ºr   z·INSERT INTO gov_search(rowid, title, site_name, summary) SELECT r.id, r.title, r.site_name, r.summary FROM gov_raw r WHERE r.id NOT IN (SELECT rowid FROM gov_search) AND r.site_name=?)Úsqlite3Úconnectr   ÚexecuteÚ	SITE_NAMEr   ÚosÚpathÚbasenameÚ__file__Útotal_changesr   ÚcommitÚclose)r1   rC   ÚdbÚokÚfailÚitr   s          r   Úto_dbrR   Y   sH  € ÙØÛØ	�‰œ¨BˆÓ	/€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+Ø�H€BˆØò ˆð	Ø�J‰Jð+ô Ø—V‘V˜G“_Ò*¨¨D¨SÐ1Ø—F‘F˜5 "Ó%Ø—F‘F˜9 bÓ)Ø—V‘V˜JÓ'Ò-¨2¨s°Ð3ØØ"Ü—G‘G×$Ñ$¤XÓ.ð	ôð$ ×Ñ !Ò#Ø�a‘‘à˜‘	�øð/ð4 ‡J�Jð	\ô 
ˆô	ð ‡I�I„KØ‡H�H„JØˆtˆ8€Oøô ò 	Ø�A‰I�Dûð	ús   ÁB%D.Ä.	EÄ7EÅEc                 óT  — t        «       }|syt        |«      }|st        d«       y|D �cg c]  }|d   r|d   t        k\  sŒ|‘Œ }}|r|d   d   nd}|r|d   d   nd}t        dt	        |«      › dt	        |«      › d	|› d
|› d�	«       | r|d d }t        dt	        |«      › d�«       |syt        |«      D ]Y  \  }}t        d|dz   › dt	        |«      › d|d   d d › d�dd¬«       t        |d   «      }	|	|d<   t        t	        |	«      › d�«       Œ[ t        |«      \  }
}|
|fS c c}w )NrA   z  ! no items foundr%   r   ú?éÿÿÿÿz  List: z items, z within 3yr (z ~ ú)é   z  TEST mode: z itemsz  [r   r   ú] r#   é(   z... r!   T)ÚendÚflushr$   r>   ÚB)r   r7   r   ÚCUTOFFÚlenÚ	enumerater?   rR   )Útestr0   r1   rQ   ÚfilteredÚfÚlÚiÚitemr>   rO   rP   s               r   Úcrawlrf   …   s^  € Ü‹<€DÙØÜ�tÓ€EÙÜÐ"Ô#Øð #ÖU�r¨"¨Zª.¸B¸z¹NÌfÓ<T’ÐU€HÐUá#+ˆ�‰�JÒ°€AÙ$,ˆ�‰�ZÒ °#€AÜ	ˆH”S˜“Z�L ¬¨X«¨°}ÀQÀCÀsÈ1È#ÈQÐ
OÔPáØ˜B˜Q�<ˆÜ�œc (›m˜_¨FÐ3Ô4áØô ˜XÓ&ò "‰ˆˆ4Ü��A�a‘C�5˜œ#˜h›-˜¨¨4°©=¸¸"Ð+=Ð*>¸dÐCÈÐSWÕXÜ˜t E™{Ó+ˆØ!ˆˆY‰Ü”�W“�˜aÐ Õ!ð	"ô �X‹�H€BˆØˆtˆ8€Oùò+ Vs   «D%ÁD%Ú__main__z--testÚTESTÚFULLú[rX   )r`   z  Time: r   Úsz  New: z Skip: )F)$Ú__doc__r&   ÚsysrG   Útimer   r   r   r   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrF   r   Úgetenvr   ÚnowÚutcÚstrftimer]   r   r   r7   r?   rR   rf   Ú__name__Úargvr`   Úmoder   Út0rO   rP   Úround© r8   r   ú<module>r}      s<  ðñ
÷ × ß 2Ñ 2ß Û 	Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà.€	ØN€ØˆB�I‰I�kÐ#4Ó5€	Øˆh�l‰l˜8Ÿ<™<Ó(©9¸%Ô+@Ñ@×JÑJÈ:ÓV€ØÐZÐ[€òòòBò**óXðB ˆzÒØ�s—x‘xÐ€DÙ‰6˜v€DÙ	„GÙ	ˆAˆiˆ[˜˜4˜&Ð
!Ô"Ø	ˆ�‰‹€BÙ˜$Ô�H€BˆÙ	ˆH‘U˜9˜4Ÿ9™9›; r™>¨1Ó-Ð.¨aÐ
0Ô1Ù	ˆG�B�4�w˜t˜fÐ
%Õ&ð r8   