Ë
     E¶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Z ej                  d«       ddlZddl	m
Z
 ddlmZ dZdZdZd	Zd
ZddiZdZdZej*                  dd ZdZe ee«      k  rŒee   Zedk(  rdZnnej3                  d«      r	  eej7                  dd«      d   «      Zn@edk(  r#edz    ee«      k  r	  eeedz      «      Zedz  Znej;                  «       r ee«      Zedz  Ze ee«      k  rŒŒerdZdd„Zd„ Zd„ Z d„ Z!d„ Z"e#dk(  r e"«        yy# e$ r Y Œ:w xY w# e$ r Y Œcw xY w)u0  
é¾™å�—å¸‚äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š (lnzf/c104543)
=========================================
https://www.jxln.gov.cn/lnzf/c104543/list.shtml
UCAP CMS (createPageHTML åˆ†é¡µ, list_N.shtml)
åˆ—è¡¨: ul.clearfix > li > a[href="/lnzf/c104543/YYYYMM/{uuid}.shtml"] + span(æ—¥æœŸ)
è¯¦æƒ…: meta ArticleTitle/PubDate, æ­£æ–‡ div#zoomcon > UCAPCONTENT (å¤§å°�å†™å�˜ä½“, re.I)
é™„ä»¶: æ­£æ–‡å†… <a> + article-appendixs (urljoin è¯¦æƒ…URL ç»�å¯¹åŒ–)
2026-08-02 é‡�å†™: ä¿®å¤� --pages è§£æž�/ucapcontent å¤§å°�å†™/

 åˆ†æ®µ/è¡¨æ ¼ HTML/é™„ä»¶ç»�å¯¹ URL/gov_search ä¸‰åˆ—
é    NÚignore)ÚBeautifulSoup)Úurljoinzhttps://www.jxln.gov.cnz)https://www.jxln.gov.cn/lnzf/c104543/listu!   é¾™å�—å¸‚äººæ°‘æ”¿åºœé€šçŸ¥å…¬å‘Šu   æ±Ÿè¥¿zcrawl_jxln.pyz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36é   Fz--fullTz--pages=ú=z--pageséT   c                 ó4  — t        |«      D ]3  }	 t        j                  | t        |¬«      }d|_        |j
                  c S  y # t        $ rK}t        d| d d ›d|›�t        j                  ¬«       ||dz
  k  rt        j                  d«       Y d }~Œ†d }~ww xY w)	N)ÚheadersÚtimeoutzutf-8z  [ERR] éZ   z: )Úfiler   é   )ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)ÚurlÚretriesr   ÚattemptÚrÚes         ú/root/gov_crawler/crawl_jxln.pyÚfetchr!   6   s„   € Ü˜“>ò ˆð	Ü—‘˜S¬'¸7ÔCˆAØ ˆAŒJØ—6‘6ŠMð	ð øô	 ò 	Ý c¨#¨2¢h±Ð2¼¿¹ÕDØ˜ 1™Ò$Ü—
‘
˜1”ÿøð	ús   �.AÁ	BÁABÂBc                 ó~   — t        j                  dd| «      } t        j                  dd| «      } | j                  «       S )z2Strip entity/space prefixes and ellipsis suffixes.u   ^[\s\xa0Â·\u00b7]+Ú z\s*\.{3,}\s*$)ÚreÚsubÚstrip)Útitles    r    Úclean_titler(   C   s4   € ä�F‰FÐ(¨"¨eÓ4€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c                 ó–  — g }t        | d«      }d}|j                  d«      D ]5  }|j                  dd¬«      }|sŒt        j                  d|d   «      sŒ3|} n |s|S |j                  d	«      D ]×  }|j                  dd¬«      }|sŒ|d   }t        j                  d|«      sŒ5t        t        |«      }|j                  d
«      xs |j                  d¬«      }	|	sŒmd}
|j                  d«      }|r9t        j                  d|j                  «       «      }|rd|j                  «       z  }
|j                  t        |	«      ||
f«       ŒÙ |S )z7Extract (title, url, date) from ul.clearfix > li items.úhtml.parserNÚulÚaT©Úhrefz$/lnzf/c104543/\d{6}/[a-f0-9]+\.shtmlr/   Úlir'   ©r&   r#   Úspanú(\d{4})-(\d{2})-(\d{2})ú%s-%s-%s)r   Úfind_allÚfindr$   Úsearchr   ÚBASE_URLr   Úget_textÚgroupsÚappendr(   )ÚhtmlÚitemsÚsoupÚlist_ulr,   r-   r0   r/   Úfull_urlr'   ÚdateÚspÚms                r    Úextract_list_itemsrD   J   sC  € à€EÜ˜˜}Ó-€Dà€GØ�m‰m˜DÓ!ò ˆØ�G‰G�C˜dˆGÓ#ˆÚ”—‘ÐBÀAÀfÁIÕNØˆGÙð	ñ
 ØˆØ×Ñ˜tÓ$ò ;ˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰yˆÜ�y‰yÐ@À$ÔGØÜœ8 TÓ*ˆØ—‘�g“Ò8 !§*¡*°4 *Ó"8ˆÙØàˆØ�W‰W�V‹_ˆÙÜ—	‘	Ð4°b·k±k³mÓDˆAÙØ! A§H¡H£JÑ.�Ø�‰”k %Ó(¨(°DÐ9Õ:ð%;ð& €Lr)   c           
      óú  ‡— t        | d«      }d}|j                  dddi¬«      }|r|j                  d«      r|d   }|s%|j                  d«      }|r|j                  d	¬
«      }t	        |«      }d}|j                  dddi¬«      }|r?|j                  d«      r.t        j                  d|d   «      }|rd|j                  «       z  }|s_t        j                  d| «      }	|	rGd|	j                  d«      t        |	j                  d«      «      t        |	j                  d«      «      fz  }g }
|j                  dd¬«      }|�rs|j                  dt        j                  d«      ¬«      D ]  }|j                  «        Œ |j                  t        j                  dt
        j                  «      «      }|r|n|}|j                  d¬«      D ]ê  }|j                  dk(  r|
j                  t!        |«      «       Œ-|j                  dv sŒ<|j                  dd	¬«      Š‰rtt#        ˆfd„d D «       «      r`|j                  dd	¬«      D ]/  }|d!   sŒ	|d!   j%                  d"«      rŒt'        ||d!   «      |d!<   Œ1 |
j                  t!        |«      «       ŒÅ|j                  d	¬
«      }|sŒÚ|
j                  |«       Œì d}|j                  dt        j                  d#«      ¬«      }|rn|j                  dd	¬«      D ]X  }|d!   }|j%                  d$«      st'        ||«      }|j                  d	¬
«      xs |j)                  d%«      d&   }|d'|›d(|›d)�z  }ŒZ t+        «       }g }|
D ]X  }t        j,                  d*dt        j,                  d+d|«      «      }|sŒ2||v rŒ7|j/                  |«       |j                  |«       ŒZ d,j1                  |«      }|r(|j3                  «       |vr|d,z   |j3                  «       z   }d-|v rdnd.}||||fS )/zJExtract title, date, content (paragraphs 

, tables as HTML), attachments.r+   r#   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentr'   Tr1   ÚPubDater3   r4   u+   (\d{4})[-å¹´](\d{1,2})[-æœˆ](\d{1,2})[æ—¥]?z%s-%02d-%02dr   r   é   ÚdivÚzoomcon)Úidz*info_ewm|qr_container|article-reldocuments)Úclass_z^ucapcontent$F)Ú	recursiveÚtable)ÚprM   Úh1Úh2Úh3r0   r-   r.   c              3   óH   •K  — | ]  }|‰d    j                  «       v –— Œ y­w)r/   N)Úlower)Ú.0ÚxÚa_ins     €r    ú	<genexpr>z!extract_detail.<locals>.<genexpr>•   s)   øè ø€ ò  q¸a  T¨&¡\×%7Ñ%7Ó%9Ô 9ñ  qùs   ƒ")	z.pdfz.docz.docxz.xlsz.xlsxz.rarz.zipz/uploadzfiles/r/   )ÚhttpÚ
javascriptzarticle-appendixsr]   ú/éÿÿÿÿz<p><a href="z" target="_blank">z	</a></p>
z\s+ú<[^>]+>z

z<tabler   )r   r6   r   r9   r(   r$   r7   r:   ÚgroupÚintr5   ÚcompileÚ	decomposeÚIrG   r;   ÚstrÚanyÚ
startswithr   ÚsplitÚsetr%   ÚaddÚjoinr&   )r<   Úpage_urlr>   r'   Úmeta_tÚttrA   Úmeta_drC   ÚdmÚcontent_partsÚzoomÚnoiseÚucapÚ	containerÚelÚa2ÚtxtÚappendix_htmlÚappr-   r/   rG   ÚseenÚpartsrS   ÚkeyrJ   Ú	has_tabler[   s                                @r    Úextract_detailr�   m   sÍ  ø€ ä˜˜}Ó-€Dð €EØ�Y‰Y�v f¨nÐ%=ˆYÓ>€FÙ�&—*‘*˜YÔ'Ø�yÑ!ˆÙØ�Y‰Y�wÓˆÙØ—K‘K d�KÓ+ˆEÜ˜Ó€Eð €DØ�Y‰Y�v f¨iÐ%8ˆYÓ9€FÙ�&—*‘*˜YÔ'Ü�I‰IÐ0°&¸Ñ2CÓDˆÙØ §¡£
Ñ*ˆDÙÜ�Y‰YÐEÀtÓLˆÙØ! R§X¡X¨a£[´#°b·h±h¸q³kÓ2BÄCÈÏÉÐQRËÓDTÐ$UÑUˆDð €MØ�9‰9�U˜yˆ9Ó)€DÚØ—]‘] 5´·±Ð<iÓ1j�]Ókò 	ˆEØ�O‰OÕð	à�y‰yœŸ™Ð$4´b·d±dÓ;Ó<ˆÙ ‘D dˆ	Ø×$Ñ$¨uÐ$Ó5ò 	2ˆBØ�w‰w˜'Ò!Ø×$Ñ$¤S¨£WÕ-Ø—‘Ð@Ò@Ø—w‘w˜s¨�wÓ.�ÙœCó  qØ oô qô qà Ÿk™k¨#°D˜kÓ9ò G˜Ø˜f›:¨b°©j×.CÑ.CÐDZÕ.[Ü)0°¸2¸f¹:Ó)F˜B˜všJðGð "×(Ñ(¬¨R«Õ1àŸ+™+¨D˜+Ó1�CÚØ%×,Ñ,¨SÕ1ð	2ð" €MØ
�)‰)�E¤"§*¡*Ð-AÓ"Bˆ)Ó
C€CÙ
Ø—‘˜c¨�Ó-ò 	[ˆAØ�V‘9ˆDØ—?‘? 6Ô*Ü˜x¨Ó.�Ø—:‘: D�:Ó)Ò@¨T¯Z©Z¸«_¸RÑ-@ˆDÙÊtÒUYÐZÑZ‰Mð	[ô ‹5€DØ€EØò ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÙØØ�$‰;ØØ�‰�ŒØ�‰�Q�ðð �k‰k˜%Ó €Gñ ˜×,Ñ,Ó.°gÑ=Ø˜FÑ" ]×%8Ñ%8Ó%:Ñ:ˆà Ñ(‘¨a€IØ�'˜4 Ð*Ð*r)   c                  óÔ  — g } t        «       }t        dt        dz   «      D ]»  }|dk(  r	dt        z  n
dt        |fz  }t	        |«      }|st        d|z  «        n…t        |«      }t        d|t        |«      fz  «       |D ]/  }|d   |vsŒ|j                  |d   «       | j                  |«       Œ1 t        j                  d«       |dkD  sŒ¬t        |«      dk  sŒ» n t        dt        | «      z  «       t        j                  d	d
«      }t        j                  |d¬«      }|j!                  d«       |j#                  «       }	d}
d}t%        | «      D �]K  \  }\  }}}t	        |«      }|s|dz  }Œt'        ||«      \  }}}}|s|}|s|}|r1t        t)        j*                  dd|«      j-                  «       «      dk  rt        d|d d z  «       |dz  }Œ�t)        j*                  dd|«      j-                  «       d d }|	j!                  d|||||t.        t0        t2        ||f
«       |	j4                  dkD  r*|	j!                  d|	j6                  |t.        |f«       |
dz  }
n|dz  }|dz   dz  dk(  rt        d|dz   t        | «      |
fz  «       t        j                  d«       �ŒN |j9                  «        |j;                  «        t        d|
|fz  «       t        dt.        t        fz  «       y )Nr   z%s.shtmlz%s_%d.shtmlz  [SKIP] Page %d failedzPage %d: %d itemsg333333Ó?é   zTotal unique items: %dÚ	SEARCH_DBz/mnt/data/search.dbé<   )r   zPRAGMA busy_timeout=60000r   ra   r#   é
   z  [SKIP] empty content: %sé2   éÈ   zÑINSERT OR IGNORE INTO gov_raw
                     (page_url, source_url, title, content, publish_date, site_name, group_name, script_name, has_table, summary)
                     VALUES (?,?,?,?,?,?,?,?,?,?)zSINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES (?,?,?,?)z  progress %d/%d (new=%d)gš™™™™™É?u   æ–°å¢ž: %d æ�¡, è·³è¿‡: %du)   ç«™ç‚¹: %s | æ �ç›®: c104543 | é¡µæ•°: %d)rk   r   Ú
_MAX_PAGESÚLIST_URLr!   r   rD   Úlenrl   r;   r   r   ÚosÚgetenvÚsqlite3ÚconnectÚexecuteÚcursorÚ	enumerater�   r$   r%   r&   Ú	SITE_NAMEÚ
GROUP_NAMEÚSCRIPT_NAMEÚrowcountÚ	lastrowidÚcommitÚclose)Ú	items_allÚ	seen_urlsÚpager   r<   r=   Úitr„   ÚconnÚcÚinsertedÚskippedÚiÚ
list_titlern   Ú	list_dater'   rJ   rA   r€   Úsummarys                        r    Úmainr¦   À   sØ  € Ø€IÜ“€IÜ�aœ a™Ó(ò ˆØ'+¨q¢yˆjœ8Ò#°mÄxÐQUÐFVÑ6VˆÜ�S‹zˆÙÜÐ+¨dÑ2Ô3ÙÜ" 4Ó(ˆÜÐ! T¬3¨u«:Ð$6Ñ6Ô7Øò 	%ˆBØ�!‰u˜IÒ%Ø—‘˜b ™eÔ$Ø× Ñ  Õ$ð	%ô 	�
‰
�3ŒØ�!‹8œ˜E›
 Q›Ùðô  
Ð
"¤S¨£^Ñ
3Ô4ä—	‘	˜+Ð'<Ó=€IÜ�?‰?˜9¨bÔ1€DØ‡L�LÐ,Ô-Ø�‰‹€Aà€HØ€GÜ09¸)Ó0Dó Ñ,ˆÑ,ˆJ˜ )Ü�X‹ˆÙØ�q‰LˆGØÜ*8¸¸xÓ*HÑ'ˆˆw˜˜iÙØˆEÙØˆDÙœ#œbŸf™f Z°°WÓ=×CÑCÓEÓFÈÒKÜÐ.°°s¸°Ñ;Ô<Ø�q‰LˆGØÜ—&‘&˜ R¨Ó1×7Ñ7Ó9¸$¸3Ð?ˆØ	�	‰	ð 5ð ˜X u¨g°t¼YÌ
ÔT_ÐajÐlsÐtô	vð �:‰:˜Š>Ø�I‰IÐkØ—{‘{ E¬9°gÐ>ô@à˜‰M‰Hà�q‰LˆGØ�‰E�R‰<˜1ÒÜÐ-°°Q±¼¸I»ÈÐ0QÑQÔRÜ�
‰
�3Žð7ð: 	‡K�K„MØ‡J�J„LÜ	Ð
&¨(°GÐ)<Ñ
<Ô=Ü	Ð
5¼ÄJÐ8OÑ
OÕPr)   Ú__main__)rL   é   )$Ú__doc__r   rŒ   r$   r   rŽ   ÚwarningsÚfilterwarningsr   Úbs4r   Úurllib.parser   r8   rŠ   r“   r”   r•   r   r‰   Ú_FULLÚargvr¢   r‹   r-   ri   rc   rj   Ú
ValueErrorÚisdigitr!   r(   rD   r�   r¦   Ú__name__© r)   r    ú<module>r´      s…  ðñ	÷ "× !Ó !Û Ø €× Ñ ˜Ô !Û Ý Ý  à$€Ø6€Ø/€	Ø€
Ø€ØÐWÐ
X€ð €
Ø€Ø
‡x�x��€|€Ø€Ø‰#ˆd‹)‚mØˆQ‰€AØˆH‚}Ø‰Ø	
�‰�jÔ	!ð	Ù˜QŸW™W S¨!›_¨QÑ/Ó0‰Jð 
ˆiŠ˜A ™E¡C¨£IÒ-ð	Ù˜T ! a¡%™[Ó)ˆJð 	
ˆQ‰‰Ø	
�‰ŒÙ˜“Vˆ
Øˆ�F€Að# ‰#ˆd‹)ƒmñ$ 	Ø€Jó
òò òFP+òf<Qð~ ˆzÒÙ…Fð øðq ò 	Ùð	ûð
 ò 	Ùð	ús$   Â
D Â:D$ ÄD!Ä D!Ä$D,Ä+D,