Ë
     ù£j¸E  ã                   óÌ  — 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ddlZ	ddl
m
Z
mZ 	 ddlmZ ej                  j!                  dd«      ZdZdZd	Zd
ZdZedz   Zedz   ZddgZ e
j4                  «        ed¬«      z
  j7                  d«      ZdddedœZdZ eej@                  «      D ]k  \  Z!Z"e"jG                  d«      r	  e$e"jK                  dd«      d   «      ZŒ4e"dk(  sŒ:e!dz    e'ej@                  «      k  sŒS	  e$ej@                  e!dz      «      ZŒm edk\  rendZ(d„ Z)d$d„Z*d„ Z+d„ Z,d „ Z-d!„ Z.d"„ Z/e0d#k(  r e/«        yy# e$ r dZY �Œw xY w# e&$ r Y Œ°w xY w# e&$ r Y Œ»w xY w)%u	  
crawl_shanggao.py - ä¸Šé«˜åŽ¿-å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»· (æ±Ÿè¥¿å®œæ˜¥)
https://www.shanggao.gov.cn/sgxrmzf/jsxmhjyxpj/pc/list.html

CMS: UCAP/æ”¿åŠ¡å…¬å¼€ç«™ç¾¤ + JSON æ£€ç´¢æŽ¥å�£
åˆ—è¡¨+æ­£æ–‡: POST https://www.shanggao.gov.cn/searchManuscript
   body: {"current":N,"pageSize":20,"channelTreeIds":["<cid>"]}
   resp: {"data":{"total":387,"results":[{title,pubDate,id,urls,content:{content:HTML}}]}}
   => æ­£æ–‡ HTML å†…è�”ï¼Œ**æ— éœ€æŠ“è¯¦æƒ…é¡µ**
âš ï¸� httpâ†’https 301ï¼šæ—§è„šæœ¬ç”¨ http + curl -s ä¸�è·Ÿè·³è½¬ â†’ JSON è§£æž�å¤±è´¥ â†’ æ¯�å¤©é�™é»˜ 0 æ�¡ã€�
   DB å�œæ›´åˆ° 2026-08-19ï¼ˆ2026-09-11 é‡�å†™ä¿®å¤�ï¼‰
âš ï¸� channelTreeIds ä¼ å¤šä¸ªæ˜¯ã€�æ— åŽ»é‡�å¹¶é›†ã€‘(767 = 380 + 387)ï¼Œä¸”æŽ’åº�æŒ‰æ—¥æœŸæ··æŽ’ â†’
   URL ä¼šè�½åœ¨æ—§æ �ç›®ã€‚æ•…æ”¹ä¸º**æŒ‰æ �ç›®åˆ†åˆ«æŠ“å�–**ï¼šç”¨æˆ·æ �ç›® jsxmhjyxpj ä¼˜å…ˆï¼Œ
   æ—§é•œåƒ�æ �ç›® jsxmhjyjpj2 è¡¥å…¶ç‹¬æœ‰çš„ 16 æ�¡ï¼ŒæŒ‰æ ‡é¢˜å…¨å±€åŽ»é‡�ã€‚
   jsxmhjyxpj   1996848032669868032 (387) â†� ç”¨æˆ·æŒ‡å®š
   jsxmhjyjpj2  1996849911248297984 (380) â†� é•œåƒ�æ—§æ �ç›®
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoupÚ
JSONL_PATHÚ u   ä¸Šé«˜çŽ¯è¯„å…¬ç¤ºu   æ±Ÿè¥¿zcrawl_shanggao.pyu   çŽ¯è¯„å…¬ç¤ºzhttps://www.shanggao.gov.cnz/searchManuscriptz /sgxrmzf/jsxmhjyxpj/pc/list.html)Ú1996848032669868032Ú
jsxmhjyxpj)Ú1996849911248297984Újsxmhjyjpj2iG  )Údaysz%Y-%m-%dzkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36zapplication/jsonz.application/json, text/javascript, */*; q=0.01)z
User-AgentzContent-TypeÚAcceptÚRefereré   z--pages=ú=é   z--pagesc                 ó`  — | syt        j                  | «      } | j                  dd«      j                  dd«      j                  dd«      j                  dd«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd	| «      } | j                  «       S )
Nr   u   â€‹u   â€Œu   â€�u   ï»¿u3   ^\s*(?:&middot;|Â·|\u00b7)?\s*(?:&nbsp;|\u00a0)?\s*u   ^[â€¢Â·]\s*ú\s+ú )Úhtml_libÚunescapeÚreplaceÚreÚsubÚstrip)Úts    úcrawl_shanggao.pyÚclean_titler   C   s”   € ÙØÜ×Ñ˜!Ó€AØ	�	‰	�(˜BÓ×'Ñ'¨°"Ó5×=Ñ=¸hÈÓK×SÑSÐT\Ð^`Óa€AÜ
�‰ÐEÀrÈ1ÓM€AÜ
�‰ˆ~˜r 1Ó%€AÜ
�‰ˆv�s˜AÓ€AØ�7‰7‹9Ðó    c                 óØ  — t        t        «      }d }t        d«      D ]‘  }	 dd l}dd l}|j                  |j                  j                  «       |j                  | ||d¬«      }|j                  dk(  rt        |_        |j                  c S d|j                  z  }t        j                   d«       Œ“ t#        d	| d d
 ›d|›�d¬«       y # t        $ r}t        |«      d d }Y d }~ŒJd }~ww xY w)Né   r   F)ÚheadersÚtimeoutÚverifyéÈ   úHTTP %séP   é   z  [fetch fail] éZ   z -> T©Úflush)ÚdictÚHEADERSÚrangeÚrequestsÚurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningÚgetÚstatus_codeÚENCÚencodingÚtextÚ	ExceptionÚstrÚtimeÚsleepÚprint)	Úurlr"   ÚhÚlast_errÚattemptr.   r/   ÚrÚes	            r   ÚfetchrC   N   sÍ   € ÜŒW‹€AØ€HÜ˜“8ò ˆð		#ß$Ø×$Ñ$ W×%7Ñ%7×%NÑ%NÔOØ—‘˜S¨!°WÀU�ÓKˆAØ�}‰} Ò#Ü �”
Ø—v‘v’Ø  1§=¡=Ñ0ˆHô 	�
‰
�1�ðõ 
 s¨3¨B¢x±Ð
:À$ÕGØøô	 ò 	#Ü˜1“v˜c˜r�{�Hûð	#ús   ¡A'CÂCÃ	C)ÃC$Ã$C)c           
      óî  ‡‡%‡&‡'— | sddg fS t        j                  dd| t         j                  ¬«      } t        j                  dd| t         j                  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } g Š%i Š&t        j                  dd| «      } t        �r'	 t	        | d	«      }|j                  d
d¬«      D �]6  }|d   }|j                  d«      s;|j                  d«      s*t        j                  d|t         j                  «      sd|v sŒU|j                  d«      xs |}|j                  d¬«      xs[ |j                  d«      xsH |j                  d«      xs5 t        j                  j                  |j                  d«      d   «      xs d}t        j                  j                  ‰|«      }‰%j!                  ||f«       dt#        ‰&«      z  }d|›d|›d�‰&|<   |j%                  |«       �Œ9 |j                  d«      D ]`  }	|	j                  d«      xs |	j                  d«      xs d}
t        j                  d|
t         j                  «      sŒQ|	j'                  «        Œb |j                  d«      D �]@  }|j                  d«      }|sŒ|j                  d¬«      rŒ+g }|D ]Ò  }	|	j                  d«      xs |	j                  d«      xs d}
|
sŒ.t        j                  j                  ‰|
«      }|	j                  d «      xs |	j                  d«      xs dj)                  «       xs5 t        j                  j                  |
j                  d«      d   «      xs d!}|j!                  d|›d|›d�«       ŒÔ |s�Œd"t#        ‰&«      z  }d#d$j+                  |«      z   d%z   ‰&|<   |j%                  |«       �ŒC |j                  d«      D ]å  }	|	j                  d«      xs |	j                  d«      xs d}
|
sŒ.t        j                  j                  ‰|
«      }|	j                  d «      xs |	j                  d«      xs dj)                  «       xs5 t        j                  j                  |
j                  d«      d   «      xs d!}d"t#        ‰&«      z  }d&|›d|›d'�‰&|<   |	j%                  |«       Œç t-        |«      } ˆ%ˆ&ˆfd(„}t        j                  d)|| t         j                  t         j                  z  ¬«      } t        �r#	 t	        | d	«      }|j                  d«      D ]{  }d*D ]  }|j0                  j3                  |d+«       Œ  t5        |j0                  «      D �cg c]  }|j7                  d,«      sŒ|‘Œ c}D ]  }|j0                  j3                  |d+«       Œ  Œ} |j                  d-«      D ]h  }|j                  d¬«      sD|j9                  d.«      s3|j9                  d«      s"|j9                  d
«      s|j'                  «        ŒY|j;                  «        Œj t-        |«      } g Š'ˆ'fd/„}t        j                  d0| t         j                  «      rd1nd}d+}|| k7  r@| }t        j                  d2|| t         j                  t         j                  z  ¬«      } || k7  rŒ@t        j                  d%d3| t         j                  ¬«      } t        j                  d4d5| t         j                  ¬«      } t        j                  d6d| t         j                  ¬«      } g }| j                  d7«      D �]¥  }|j)                  «       }|sŒt        j                  d8d|«      }t        j                  d9d|«      }|j=                  d:d«      j=                  d;d<«      }t        j                  d=d<|«      }t        j                  d>d|«      }t?        j@                  |«      }|j=                  d?d<«      j=                  d@d<«      }t        j                  dAd|«      }|sŒæ‰&jC                  «       D ]  \  }}|j=                  ||«      }Œ tE        ‰'«      D ]  \  }}|j=                  dB|z  |«      }Œ t        j                  dC|t         j                  «      s*t        j                  dD|t         j                  «      rdE|z  }|j!                  |j)                  «       «       �Œ¨ d7j+                  |«      }‰&jC                  «       D ]  \  }}|j=                  ||«      }Œ tE        ‰'«      D ]  \  }}|j=                  dB|z  |«      }Œ t        j                  dFd|«      }t?        j@                  |«      }t        j                  dGd5|«      }t        j                  dHd7|«      }t        j                  d=d<|«      }tG        «       g } }|j                  d7«      D ]W  }t        j                  dIdt        j                  d>d|«      «      }|r||v rŒ6|jI                  |«       | j!                  |«       ŒY d7j+                  | «      j)                  «       }g tG        «       }"}!‰%D ].  \  }#}$|#|"v rŒ|"jI                  |#«       |!j!                  |#|$f«       Œ0 |||!fS # t.        $ r Y �ŒËw xY wc c}w # t.        $ r Y �Œww xY w)JuR   æ­£æ–‡ HTML æ¸…æ´—ï¼šä¿�ç•™ <p>/<table>ï¼Œé™„ä»¶è½¬ <p><a>ç»�å¯¹URL</a></p> æ®µè�½r   r   z
<!--.*?-->)Úflagsz<meta[^>]*>z<script[^>]*>.*?</script>z<style[^>]*>.*?</style>u   ã€�å­—å�·ï¼š[^ã€‘]*ã€‘zhtml.parserÚaT)ÚhrefrG   Úappendixzdata-appendixz&\.(pdf|docx?|xlsx?|zip|rar|wps|et|ofd)z/module/download/Úoldsrc)r   Ú_titleÚtitleú?õ   é™„ä»¶z__ATTACH__%d__ú	<a href="ú" target="_blank">ú</a>ÚimgÚsrcz(icons?/|fileTypeImages/icon_)ÚpÚaltu   å›¾ç‰‡z__IMG__%d__z<p>z<br/>z</p>z<p><a href="z</a></p>c                 óÀ  •— | j                  d«      }t        j                  d|t        j                  «      r2|j	                  «       j                  d«      rdS | j                  d«      S | j                  d«      }t        j                  dd|«      }t        j                  |«      j                  «       }t        j                  dd|«      j                  «       }|s5t        j                  j                  |j                  d	«      d   «      xs d
}t        j                  j!                  ‰|«      }‰j#                  ||f«       dt%        ‰«      z  }d|›d|›d�‰|<   |S )Nr   z&^(?:javascript:|mailto:|tel:|s?ftp:|#)zjavascript:r   r   r'   ú<[^>]+>u   ^é™„ä»¶[:ï¼š]\s*rL   rM   z__LINK__%d__rN   rO   rP   )Úgroupr   ÚmatchÚIÚlowerÚ
startswithr   r   r   r   ÚosÚpathÚbasenameÚsplitÚurllibÚparseÚurljoinÚappendÚlen)	ÚmrG   ÚinnerÚtxtÚabs_urlÚkeyÚattachmentsÚlink_protectÚpage_urls	         €€€r   Ú
_link_replz html_to_text.<locals>._link_repl¨   s  ø€ Ø�w‰w�q‹zˆÜ�8‰8Ð=¸tÄRÇTÁTÔJØŸ™›×0Ñ0°Ô?�2ÐOÀQÇWÁWÈQÃZÐOØ—‘˜“
ˆÜ�f‰f�Z  UÓ+ˆÜ×Ñ Ó$×*Ñ*Ó,ˆÜ�f‰fÐ(¨"¨cÓ2×8Ñ8Ó:ˆÙÜ—'‘'×"Ñ" 4§:¡:¨c£?°1Ñ#5Ó6ÒB¸(ˆCÜ—,‘,×&Ñ& x°Ó6ˆØ×Ñ˜G S˜>Ô*Øœs <Ó0Ñ0‰ÚELÊcÐRˆ�SÑØˆ
r   z&<a\s[^>]*href="([^"]+)"[^>]*>(.*?)</a>)ÚstyleÚclassÚlangÚdirÚalignÚvalignÚwidthÚheightÚborderÚcellpaddingÚcellspacingzdata-mce-stylezdata-mce-hrefzdata-mce-srcNzdata-ÚdivÚtablec                 óf   •— ‰j                  | j                  d«      «       dt        ‰«      dz
  z  S )Nr   ú__TBL__%d__r   )rc   rW   rd   )re   Útable_protects    €r   Ú	_tbl_replzhtml_to_text.<locals>._tbl_replÒ   s.   ø€ Ø×Ñ˜QŸW™W Q›ZÔ(Ø¤ MÓ 2°QÑ 6Ñ7Ð7r   z<table[^>]*>r   z<table(?:(?!<table).)*?</table>z</p>

z	<br\s*/?>ú
z8</?(?:span|font|o:p|st1?:[a-z]+|strong|em|b|i|u)\b[^>]*>z

z(?<=>)\s*[\r\n\t]+\s*z\s*[\r\n\t]+\s*(?=<)úú	r   z	[ \t]{2,}rV   õ   Â z&nbsp;z[\s\u200b\u200c\u200d\ufeff]+r|   ú<p[ >]ú<a[ >]z	<p>%s</p>z __(?:LINK|TBL|IMG|ATTACH)__\d+__z[ \t]+\nz\n{3,}r   )%r   r   ÚSrY   r   Úfind_allr3   ÚsearchÚget_textr\   r]   r^   r_   r`   ra   rb   rc   rd   Úreplace_withÚ	decomposer   Újoinr9   r8   ÚattrsÚpopÚlistr[   ÚfindÚunwrapr   r   r   ÚitemsÚ	enumerateÚsetÚadd)(Úcontentrl   Ú_souprF   rG   Ú	real_hrefrg   rh   ri   rQ   rR   rS   ÚimgsÚsrcsrm   ÚtagÚattrÚkÚ_aÚdr~   Ú	has_tableÚprevÚpartsÚblockÚbÚplainÚvÚiÚtblÚoutÚseenÚfinalÚdedupÚseen_uÚur   rj   rk   r}   s(    `                                   @@@r   Úhtml_to_textr®   a   sf	  û€ áØ�1�bˆyÐÜ�f‰f�] B¨´r·t±tÔ<€GÜ�f‰f�^ R¨¼¿¹Ô=€GÜ�f‰fÐ1°2°wÄbÇdÁdÌRÏTÉTÁkÔR€GÜ�f‰fÐ/°°WÄBÇDÁDÌ2Ï4É4ÁKÔP€Gà€KØ€Lä�f‰fÐ.°°GÓ<€Gö ð2	Ü! '¨=Ó9ˆEØ—^‘^ C¨d�^Ó3ó (�Ø˜‘y�Ø—E‘E˜*Ô%¨¯©¨Ô)?ÜŸ9™9Ð%NÐPTÔVX×VZÑVZÔ[Ø.°$Ò6Ø !§¡ h£Ò 7°4�IØŸ:™:¨D˜:Ó1ò T°Q·U±U¸8³_ò TÈÏÉÈgËò TÜ Ÿg™g×.Ñ.¨y¯©¸sÓ/CÀAÑ/FÓGòTØKSð ä$Ÿl™l×2Ñ2°8¸YÓG�GØ×&Ñ&¨° ~Ô6Ø*¬S°Ó->Ñ>‘CÚQXÒZ]Ð(^�L Ñ%Ø—N‘N 3Ö'ð(ð —~‘~ eÓ,ò $�Ø—w‘w˜u“~Ò@¨¯©°Ó):Ò@¸b�Ü—9‘9Ð>ÀÄRÇTÁTÕJØ—M‘M•Oð$ð
 —^‘^ CÓ(ó ,�Ø—z‘z %Ó(�Ú §
¡
° 
Õ 6Ø�DØ#ò \˜Ø!Ÿg™g e›nÒG°·±¸Ó0AÒGÀR˜Ù"Ø$Ü"(§,¡,×"6Ñ"6°xÀÓ"E˜Ø"Ÿw™w u›~ÒG°·±¸Ó1AÒGÀR×NÑNÓPò OÜ!Ÿw™w×/Ñ/°·	±	¸#³¸qÑ0AÓBòOØFNð àŸšÊWÒVYÐ$ZÕ[ð\ó Ø+¬c°,Ó.?Ñ?˜Ø,1°G·L±LÀÓ4FÑ,FÈÑ,O˜ SÑ)ØŸ™ sÖ+ð,ð" —~‘~ eÓ,ò 	&�Ø—g‘g˜e“nÒ?¨¯©°Ó(9Ò?¸R�ÙØÜ Ÿ,™,×.Ñ.¨x¸Ó=�Ø—w‘w˜u“~Ò?¨¯©°Ó)9Ò?¸R×FÑFÓHò GÜ—w‘w×'Ñ'¨¯	©	°#«°qÑ(9Ó:òGØ>Fð à#¤c¨,Ó&7Ñ7‘ÚT[Ò]`Ð$a�˜SÑ!Ø× Ñ  Õ%ð	&ô ˜%“jˆGöô �f‰fÐ>À
Ø¤B§D¡D¬2¯4©4¡Kô1€Gö ð	Ü! '¨=Ó9ˆEØ—~‘~ dÓ+ò ,�ðPò .�Dð —I‘I—M‘M $¨Õ-ð.ô '+¨3¯9©9£oÖO ¸¿¹ÀgÕ9Nš1ÒOò ,�BØ—I‘I—M‘M " dÕ+ñ,ð,ð —^‘^ EÓ*ò �Ø—z‘z¨�zÔ-°a·f±f¸W´oØ !§¡ u¤°a·f±f¸S´kØ—K‘K•Mà—H‘H•Jðô ˜%“jˆGð
 €Mô8ô —Y‘Y˜°¼¿¹Ô>‘ÀA€IØ€DØ
�'Š/ØˆÜ—&‘&Ð;¸YØ ¬¯©¬r¯t©t©ô5ˆð �'‹/ô �f‰f�W˜j¨'¼¿¹Ô>€GÜ�f‰f�\ 4¨¼¿¹Ô=€GÜ�f‰fÐPÐRTØ¤B§D¡Dô*€Gð €EØ—‘˜vÓ&ó  ˆØ�K‰K‹MˆÙØÜ�F‰FÐ+¨R°Ó3ˆÜ�F‰FÐ*¨B°Ó2ˆØ�I‰I�d˜BÓ×'Ñ'¨¨cÓ2ˆÜ�F‰F�<  aÓ(ˆÜ—‘�z 2 qÓ)ˆÜ×!Ñ! %Ó(ˆØ—‘˜f cÓ*×2Ñ2°8¸SÓAˆÜ—‘Ð7¸¸UÓCˆÙØØ ×&Ñ&Ó(ò 	 ‰DˆAˆqØ—	‘	˜!˜Q“‰Að	 ä Ó.ò 	2‰FˆAˆsØ—	‘	˜-¨!Ñ+¨SÓ1‰Að	2ô �y‰y˜ A¤r§t¡tÔ,´·±¸9ÀaÌÏÉÔ1NØ˜a‘ˆAØ�‰�Q—W‘W“YÖð+ ð. �+‰+�eÓ
€CØ×"Ñ"Ó$ò  ‰ˆˆ1Ø�k‰k˜!˜QÓ‰ð ä˜MÓ*ò 2‰ˆˆ3Ø�k‰k˜-¨!Ñ+¨SÓ1‰ð2ô �&‰&Ð4°b¸#Ó
>€CÜ
×
Ñ
˜CÓ
 €CÜ
�&‰&�˜d CÓ
(€CÜ
�&‰&�˜F CÓ
(€CÜ
�&‰&�˜s CÓ
(€Cô “%˜ˆ%€DØ�Y‰Y�vÓò ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÙ�c˜T‘kØØ�‰�ŒØ�‰�Q�ðð �+‰+�eÓ
×
"Ñ
"Ó
$€Cð œ›ˆ6€EØò ‰ˆˆ1Ø�‰;ØØ�
‰
�1ŒØ�‰�a˜�VÕð	ð �	˜5Ð Ð øôo ò 	Úð	üòB Pøô ò 	Úð	ús`   Ã-A3k Å!Ek Ê(:k Ë#k Ë6Ck ÏE k ÕAk' Ö4k"×k"×B-k' ë	këkë"k' ë'	k4ë3k4c           	      ó~  — t        j                  |d| gdœ«      }d }t        d«      D ]Ù  }	 dd l}dd l}|j                  |j                  j                  «       |j                  t        |j                  d«      t        ddd¬	«      }|j                  d
k(  rH|j                  «       j                  di «      }|j                  d«      xs g |j                  d«      fc S d|j                  z  }t!        j"                  d«       ŒÛ t%        d| ||fz  d¬«       g d fS # t        $ r}	t        |	«      d d }Y d }	~	ŒJd }	~	ww xY w)Né   )ÚcurrentÚpageSizeÚchannelTreeIdsr    r   úutf-8é(   FT)Údatar!   r"   r#   Úallow_redirectsr$   r¶   ÚresultsÚtotalr%   r&   r'   z"  [list fail] cid=%s page %d -> %sr)   )ÚjsonÚdumpsr-   r.   r/   r0   r1   r2   ÚpostÚAPI_URLÚencoder,   r4   r3   r8   r9   r:   r;   r<   )
ÚcidÚpageÚbodyÚlastr@   r.   r/   rA   rž   rB   s
             r   Ú
fetch_listrÃ     s  € Ü�:‰: $°BÈ3È%ÑPÓQ€DØ€DÜ˜“8ò ˆð
	ß$Ø×$Ñ$ W×%7Ñ%7×%NÑ%NÔOØ—‘œg¨D¯K©K¸Ó,@Ì'Ø&(°Èð ó NˆAà�}‰} Ò#Ø—F‘F“H—L‘L ¨Ó,�Ø—u‘u˜YÓ'Ò-¨2¨q¯u©u°W«~Ð=Ò=Ø˜qŸ}™}Ñ,ˆDô 	�
‰
�1�ðô 
Ð
.°#°t¸TÐ1BÑ
BÈ$ÕOØˆtˆ8€Oøô	 ò 	Ü�q“6˜#˜2�;�Dûð	ús   ¬B/DÃDÄ	D<Ä$D7Ä7D<c                 óf  — t        | j                  dd«      «      }d}t        j                  dt	        | j                  d«      xs d«      «      }|rU|j                  d«      ›d|j                  d«      j                  d«      ›d|j                  d«      j                  d«      ›�}d}| j                  d	«      }t        |t        «      r|j                  d	«      xs d}n=t        |t        «      r-	 t        j                  |«      xs i j                  d	«      xs d}|||fS # t        $ r |}Y Œw xY w)
u4   æ­£æ–‡å†…è�”åœ¨ content.contentï¼Œæ— éœ€æŠ“è¯¦æƒ…é¡µrK   r   z(\d{4})-(\d{1,2})-(\d{1,2})ÚpubDater   ú-r'   r    r•   )r   r3   r   r‡   r9   rW   ÚzfillÚ
isinstancer+   rº   Úloadsr8   )Úitrl   rK   ÚdateÚdmÚcontent_htmlÚcs          r   Úparse_detailrÏ   /  s  € ä˜Ÿ™˜w¨Ó+Ó,€EØ€DÜ	�‰Ð1´3°r·v±v¸iÓ7HÒ7NÈBÓ3OÓ	P€BÙ	ØŸX™X a�[¨"¯(©(°1«+×*;Ñ*;¸AÕ*>ÀÇÁÈÃ×@QÑ@QÐRSÔ@TÐUˆØ€LØ
�‰ˆyÓ€AÜ�!”TÔØ—u‘u˜YÓ'Ò-¨2‰Ü	�A”sÔ	ð	Ü ŸJ™J q›MÒ/¨R×4Ñ4°YÓ?ÒEÀ2ˆLð �$˜Ð$Ð$øô ò 	ØŠLð	ús   Ã1,D" Ä"D0Ä/D0c                 ój  — | j                  d«      }t        |t        «      r	 t        j                  |«      }t        |t        «      r8|j                  d«      r't        j                  j                  t        |d   «      S | j                  dd«      }t        ›d|›d|›d|›d�S # t
        $ r i }Y Œyw xY w)	NÚurlsÚpcÚidr   z	/sgxrmzf/z/pc/content/z	/content_z.html)r3   rÈ   r9   rº   rÉ   r8   r+   r`   ra   rb   ÚBASE_URL)rÊ   Úcol_coderÑ   Úaids       r   Úarticle_urlr×   B  s”   € Ø�6‰6�&‹>€DÜ�$œÔð	Ü—:‘:˜dÓ#ˆDô �$œÔ $§(¡(¨4¤.Ü�|‰|×#Ñ#¤H¨d°4©jÓ9Ð9Ø
�&‰&��rÓ
€CÞ<DÂhÒPSÒUXÐYÐYøô ò 	ØŠDð	ús   £B$ Â$B2Â1B2c                  óæ  — t         j                  j                  dt        j                  j	                  t        j                  j                  t        «      «      «       ddlm}  t        dt        t        t        t        fz  d¬«       t        «       t        «       }}dx}x}x}}g g }}t        D �]Ù  \  }	}
t!        dt        dz   «      D �]ª  }	 t#        |	|«      \  }}|st        d|
|fz  d¬«        �nƒt        d	|
|t'        |«      |fz  d¬«       |D �]0  }t)        |j+                  d
d«      «      }t-        j.                  dd|«      }|rt'        |«      dk  r|dz  }ŒL||v r|dz  }ŒV|j1                  |«       t3        |j+                  d«      xs d«      d d }|r|t        k  r|dz  }Œ™t5        ||
«      }||v r|dz  }Œ¯|j1                  |«       t7        ||«      \  }}}|s|}|s|}t9        ||«      \  }}}t'        t-        j.                  dd|«      j;                  «       «      }t-        j<                  d|t,        j>                  «       xr+ t-        j<                  d|t,        j>                  «       xr | }|dk  s|rt        d|d d z  d¬«       |dz  }�ŒŠt        ||||d|t@        dtB        |r-tE        jF                  |D ��cg c]
  \  }}||dœ‘Œ c}}d¬«      nddœ}tH        r|jK                  |«       n|jK                  |«       |dz  }t        d|d d |||rdndfz  d¬«       tM        jN                  d«       �Œ3 tH        s|r | |t        ¬«       g }tM        jN                  d«       �Œ­ t        d |
|fz  d¬«       �ŒÜ tH        rltQ        tH        d!d"¬#«      5 }|D ]+  } |jS                  tE        jF                  | d¬«      d$z   «       Œ- 	 d d d «       t        d%tH        t'        |«      fz  d¬«       n|r | |t        ¬«       t        d&||||fz  d¬«       t        d't        z  d¬«       y # t$        $ r}t        d|	||fz  d¬«       Y d }~ Œâd }~ww xY wc c}}w # 1 sw Y   Œ’xY w)(Nr   )Úpush_to_searchdbz*=== %s (%s) pages=%d/channel cutoff=%s ===Tr)   r   z  fetch error cid=%s p%d: %sz  %s p%d: empty, stopz  %s p%d: %d items (total=%s)rK   r   r   r'   rÅ   é
   rV   rƒ   r„   r   z  skip empty/placeholder: %srµ   )rK   r=   F)Úensure_ascii)Ú	site_nameÚ
source_urlr=   rK   Úpub_dateÚsummaryr•   ÚcategoryÚtagsÚ
group_namerj   u     + %s (%s, %då­—%s)é&   u   , è¡¨æ ¼g333333Ã?)Úbatch_labelg      Ð?u)     -- æ �ç›® %s å®Œæˆ�, ç´¯è®¡æ–°å¢ž %d --Úwr´   )r6   r   zJSONL written: %s (%d rows)uK   æ–°å¢ž: %d | è·³è¿‡: %d | CUTOFFæˆªæ–­: %d | æ ‡é¢˜é‡�å¤�(å�«è·¨æ �ç›®): %dz=== %s done ===)*Úsysr]   Úinsertr\   ÚdirnameÚabspathÚ__file__Úcrawler_librÙ   r<   Ú	SITE_NAMEÚSCRIPT_NAMEÚ_PAGESÚCUTOFFr“   ÚCHANNELSr-   rÃ   r8   rd   r   r3   r   r   r”   r9   r×   rÏ   r®   r   r‡   rY   ÚCATEGORYÚ
GROUP_NAMErº   r»   r   rc   r:   r;   ÚopenÚwrite)!rÙ   Úseen_titlesÚ	seen_urlsÚ	new_countÚ
skip_countÚcutoff_countÚ	dup_countÚ
jsonl_rowsÚbatchr¿   ÚcolrÀ   r¸   ÚtotrB   rÊ   rK   ri   Úpubdaterh   ÚdtitleÚddaterÍ   r•   rŸ   ÚattsÚ	plain_lenÚno_parar­   r   ÚitemÚfÚrows!                                    r   Úmainr  O  si  € Ü‡H�H‡O�O�A”r—w‘w—‘¤r§w¡w§¡´xÓ'@ÓAÔBÝ,ä	Ð
6¼)Ä[ÔRXÔZ`Ð9aÑ
aØõô !›U¤C£E�€KØ89Ð9€IÐ9�
Ð9˜\¨IØ˜B�€Jäó DZ‰ˆˆSÜ˜!œV a™ZÓ(ó B	ˆDðÜ)¨#¨tÓ4‘�˜ñ ÜÐ-°°d°Ñ;À4ÕHÚÜÐ1°S¸$ÄÀGÃÈcÐ4RÑRÐZ^Õ_àó 3!�Ü# B§F¡F¨7°BÓ$7Ó8�Ü—f‘f˜V R¨Ó/�Ùœc %›j¨1šnØ !‘O�JØØ˜+Ñ%Ø ‘N�IØØ—‘ Ô$ä˜bŸf™f YÓ/Ò5°2Ó6°s¸Ð;�Ù˜w¬Ò/Ø  AÑ%�LØä% b¨#Ó.�Ø˜iÑ'Ø ‘N�IØØ—‘˜gÔ&ä.:¸2¸wÓ.GÑ+�˜˜|ÙØ"�FÙØ#�EÜ+7¸ÀgÓ+NÑ(�˜ DÜ¤§¡ z°2°wÓ ?× EÑ EÓ GÓH�	Ü!Ÿy™y¨°G¼R¿T¹TÓBÐBò YÜ#%§9¡9¨Y¸ÄÇÁÓ#FÐFòYØOXÈ=ð à˜q’=¡GÜÐ8¸6À#À2¸;ÑFÈdÕSØ !‘O�JÙô "+¸'È'Ø#°À2Ø&´HÀbÜ",áEIô $(§:¡:ÐRV×.WÉ$È!ÈQ¸À1Ó/EÓ.WØ;@õ$BØOQñ�õ Ø×%Ñ% dÕ+à—L‘L Ô&Ø˜Q‘�	ÜÐ,°°s¸°¸UÀIÙ=F©zÈBð0Pñ PØW[õ]ä—
‘
˜4Ö ðg3!õh ¡%Ù  ´KÕ@Ø�Ü�J‰J�tÖðEB	ôF 	Ð9¸SÀ)Ð<LÑLÐTX×YðIDZõL Ü”*˜c¨GÔ4ð 	D¸Ø!ò D�Ø—‘œŸ
™
 3°UÔ;¸dÑBÕCñD÷	Dô 	Ð+¬z¼3¸z»?Ð.KÑKÐSWÖXáÙ˜U´Õ<ä	Ð
WØ˜
 L°)Ð<ñ=ØDHõJä	Ð
œiÑ
'¨tÖ4øô[ ò ÜÐ4¸¸TÀ1°~ÑEÈTÕRÝûðüób /X÷$	Dð 	Dús*   ÃP7Ë	Q!$Î$1Q'Ð7	QÑ QÑQÑ'Q0Ú__main__)é   )1Ú__doc__ræ   r\   r   rº   r:   Úhtmlr   Úurllib.parser`   r   r   Úbs4r   ÚImportErrorÚenvironr3   r   rì   rò   rí   rñ   rÔ   r½   ÚLIST_URLrð   ÚnowÚstrftimerï   r,   Ú
_MAX_PAGESr’   Úargvr¦   rF   r[   Úintr_   Ú
ValueErrorrd   rî   r   rC   r®   rÃ   rÏ   r×   r  Ú__name__© r   r   ú<module>r     s¾  ðñ÷" ?× >× >Ó >ß (ðÝ!ð �Z‰Z�^‰^˜L¨"Ó-€
à €	Ø€
Ø!€Ø€Ø(€Ø
Ð(Ñ
(€ØÐ8Ñ8€ð *Ø*ð€ð ˆ(�,‰,‹.™9¨'Ô2Ñ
2×	<Ñ	<¸ZÓ	H€ðCà&Ø>Øñ€ð €
Ù�c—h‘hÓò 
�D€A€qØ‡|�|�JÔð	Ù˜QŸW™W S¨!›_¨QÑ/Ó0‰Jð 
ˆi‹˜A ™E¡C¨¯©£MÓ1ð	Ù˜SŸX™X a¨!¡e™_Ó-‰Jð
ð " Q’‰¨A€òóò&x!òtò(%ò&
Zò\5ð~ ˆzÒÙ…Fð øðk ò ØƒMðûð@ ò 	Ùð	ûð
 ò 	Ùð	ús5   ¨E Â?EÃ;EÅEÅEÅEÅEÅE#Å"E#