Ë
    iµj¾Q  ã                   óº  — 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dZdZdZ e
j4                  «        ed¬«      z
  j7                  d«      Zddd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_jcx_tzgg.py - æ±ŸåŸŽå“ˆå°¼æ—�å½�æ—�è‡ªæ²»åŽ¿äººæ°‘æ”¿åºœ é€šçŸ¥å…¬å‘Š

åˆ—è¡¨: https://www.jcx.gov.cn/xwzx/tzgg.htm
CMS: TRS vsb é�™æ€�åˆ—è¡¨ï¼ˆå�Œæ—�ï¼šæœ›è°Ÿ line_u6_Nï¼›æœ¬ç«™æ˜¯ line_u9_Nï¼‰
  åˆ†é¡µ: âš ï¸� **å€’åº�é�™æ€�é“¾æŽ¥** â€”â€” é¡µè„š `<a href="tzgg/32.htm" class="Next">ä¸‹é¡µ</a>`
        ç¬¬ 1 é¡µ = /xwzx/tzgg.htm ï¼›ç¬¬ N é¡µ(Nâ‰¥2) = /xwzx/tzgg/{33-N+1}.htmï¼ˆç¼–å�·é€’å‡�ï¼‰
        å®žæµ‹ï¼štzgg/1.htm=æœ€è€�(2024-02, ç¬¬33é¡µ) / tzgg/32.htm=ç¬¬2é¡µ / tzgg/28.htm=ç¬¬6é¡µ
        é¡µè„šå�¦æœ‰ã€Œå°¾é¡µã€�ä¹Ÿå¸¦ class="Next" â†’ **å¿…é¡»æŒ‰é“¾æŽ¥æ–‡å­—ã€Œä¸‹é¡µã€�å�–**ï¼Œä¸�èƒ½æŒ‰ class å�–ç¬¬ä¸€ä¸ª
        æœ¬è„šæœ¬**è·Ÿéš�ã€Œä¸‹é¡µã€�é“¾æŽ¥**é€�é¡µï¼ˆä¸�æŒ‰æ•°å­—çŒœï¼Œç¬¦å�ˆè¯¥ CMS æ—¢æœ‰æ•™è®­ï¼‰
        é¡µè„šã€Œå…±492æ�¡ 1/33ã€�å�¯æ ¡éªŒæ€»é¡µæ•°
  æ�¡ç›®: <li id="line_u9_N"><a href="../info/15974/526231.htm" title="å®Œæ•´æ ‡é¢˜">â€¦</a>
        <b class="date">2026-09-24</b></li>   15 æ�¡/é¡µ
        âš ï¸� é“¾æŽ¥æ–‡å­—å�¯èƒ½è¢«ç«™ç‚¹æˆªæ–­ï¼ˆå¸¦ ...ï¼‰ï¼Œ**ä¼˜å…ˆå�– title å±žæ€§**
  è¯¦æƒ…: meta ArticleTitle / PubDate / ColumnName / ContentSource
        æ­£æ–‡: div.article_detailï¼ˆé¡µé�¢å”¯ä¸€ï¼‰
        é™„ä»¶: æ­£æ–‡**å†…**çš„ ../../virtual_attach_file.vsb?afc=... ï¼ˆvsb è™šæ‹Ÿé™„ä»¶ï¼Œæ— æ‰©å±•å��ï¼‰
              âš ï¸� é“¾æŽ¥æ–‡å­—é‡Œå¤¹ CMS çš„ã€Œå·²ä¸‹è½½ æ¬¡ã€�è®¡æ•°å™¨ â†’ éœ€æ¸…æ´—
        å™ªå£°: div.nextListï¼ˆä¸Šä¸€æ�¡/ä¸‹ä¸€æ�¡ï¼‰åœ¨æ­£æ–‡å®¹å™¨å¤–ï¼Œå¤©ç„¶ä¸�æ··å…¥
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoupÚ
JSONL_PATHÚ úutf-8u"   æ±ŸåŸŽåŽ¿äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šu   äº‘å�—zcrawl_jcx_tzgg.pyu   é€šçŸ¥å…¬å‘Šzhttps://www.jcx.gov.cnz$https://www.jcx.gov.cn/xwzx/tzgg.htmz/info/iG  )Údaysz%Y-%m-%dzkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9)z
User-AgentÚAcceptzAccept-Languageé   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| «      } t        j                  d	d
| «      } | j                  dd«      j                  dd«      } | j                  «       S )Nr   u   â€‹u   â€Œu   â€�u   ï»¿u3   ^\s*(?:&middot;|Â·|\u00b7)?\s*(?:&nbsp;|\u00a0)?\s*u   ^[â€¢Â·]\s*ú<[^>]+>ú\s+Ú u   â€œu   â€�)Úhtml_libÚunescapeÚreplaceÚreÚsubÚstrip)Úts    ú#/root/gov_crawler/crawl_jcx_tzgg.pyÚclean_titler   A   sÃ   € ÙØÜ×Ñ˜!Ó€AØ	�	‰	�(˜BÓ×'Ñ'¨°"Ó5×=Ñ=¸hÈÓK×SÑSÐT\Ð^`Óa€AÜ
�‰ÐEÀrÈ1ÓM€AÜ
�‰ˆ~˜r 1Ó%€AÜ
�‰ˆz˜2˜qÓ!€AÜ
�‰ˆv�s˜AÓ€AØ	�	‰	�(˜EÓ"×*Ñ*¨8°UÓ;€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éÈ   z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   Úfetchr?   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                 ó  — g }t        j                  d| t         j                  t         j                  z  «      D �]Ì  }|j	                  d«      }t        j
                  d|t         j                  t         j                  z  «      }|sŒNt        j                  |j	                  d«      «      j                  «       }t        |vs|j                  «       j                  d«      sŒ¨t        j
                  d|j	                  d«      t         j                  «      }t        |r|j	                  d«      n|j	                  d«      «      }t        j
                  d|t         j                  «      }|r|rt        |«      dk  r�ŒB|j	                  d«      ›d	|j	                  d«      j                  d«      ›d	|j	                  d
«      j                  d«      ›�}	|j                  t         j"                  j%                  t&        |«      ||	f«       �ŒÏ |S )uY   li#line_u9_N â†’ a[title] + b.dateï¼›ä¼˜å…ˆ title å±žæ€§ï¼ˆé“¾æŽ¥æ–‡å­—å�¯èƒ½è¢«æˆªæ–­ï¼‰z(<li[^>]*id="line_u9_\d+"[^>]*>(.*?)</li>r   z&<a\b[^>]*href="([^"]+)"[^>]*>(.*?)</a>z.htmztitle="([^"]*)"r   r#   z.<b class="date">\s*(\d{4})-(\d{1,2})-(\d{1,2})Ú-r   )r   ÚfinditerÚSÚIÚgroupÚsearchr   r   r   ÚCOL_PATHÚlowerÚendswithr   ÚlenÚzfillÚappendÚurllibÚparseÚurljoinÚBASE_URL)
Ú	html_textÚitemsÚmÚliÚamÚhrefÚtmÚtitleÚdmÚdates
             r   Ú
parse_listr[   a   sv  € à€EÜ�[‰[ÐDÀiÔQS×QUÑQUÔXZ×X\ÑX\ÑQ\Ó]ó JˆØ�W‰W�Q‹ZˆÜ�Y‰YÐ@À"ÄbÇdÁdÌRÏTÉTÁkÓRˆÙØÜ× Ñ  §¡¨!£Ó-×3Ñ3Ó5ˆÜ˜4Ñ t§z¡z£|×'<Ñ'<¸VÔ'DØÜ�Y‰YÐ)¨2¯8©8°A«;¼¿¹Ó=ˆÜ©2˜BŸH™H QœK°2·8±8¸A³;Ó?ˆÜ�Y‰YÐHÈ"ÌbÏdÉdÓSˆÙ™¤# e£*¨q¢.ÙØŸX™X a�[¨"¯(©(°1«+×*;Ñ*;¸AÕ*>ÀÇÁÈÃ×@QÑ@QÐRSÔ@TÐUˆØ�‰”f—l‘l×*Ñ*¬8°TÓ:¸EÀ4ÐHÖIðJð €Lr   c           	      óú   — t        j                  d| t         j                  «      D ]S  }t        j                  j                  |t        j                  |j                  d«      «      j                  «       «      c S  y)u_   è·Ÿéš�ã€Œä¸‹é¡µã€�é“¾æŽ¥ï¼ˆâš ï¸�ã€Œå°¾é¡µã€�ä¹Ÿæ˜¯ class=Nextï¼Œå¿…é¡»æŒ‰é“¾æŽ¥æ–‡å­—åˆ¤æ–­ï¼‰u-   <a\b[^>]*href="([^"]+)"[^>]*>\s*ä¸‹é¡µ\s*</a>r   N)
r   rB   rD   rM   rN   rO   r   r   rE   r   )rQ   Úcur_urlrS   s      r   Únext_page_urlr^   v   s^   € ä�[‰[ÐIÈ9ÔVX×VZÑVZÓ[ò TˆÜ�|‰|×#Ñ# G¬X×->Ñ->¸q¿w¹wÀq»zÓ-J×-PÑ-PÓ-RÓSÒSðTàr   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 �]Ÿ  }|d   }|j                  d«      s?|j                  d«      s.t        j                  d|t         j                  «      s	d|v sd|v sŒY|xs dj                  «       }|j                  d«      xs |j                  d«      xs dj                  «       }|r(t        j                  d|t         j                  «      s|}n|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)                  |
«       �Œ¢ |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 ]  }|j2                  j5                  |d.«       Œ  Œ' |j                  d/«      D ]×  }|j7                  d/«      €^|j7                  d0«      €M|j                  d¬«      s3|j7                  d«      s"|j7                  d
«      s|j+                  «        Œjd"|_        Œr|j                  d¬«      sD|j7                  d0«      s3|j7                  d«      s"|j7                  d
«      s|j+                  «        ŒÈ|j;                  «        ŒÙ t/        |«      } g Š)ˆ)fd1„}t        j                  d2| t         j                  «      rd3nd}d.}|| k7  r@| }t        j                  d4|| t         j                  t         j                  z  ¬«      } || k7  rŒ@t        j                  d5d&| t         j                  ¬«      } t        j                  d6d7| t         j                  ¬«      } t        j                  d8d9| t         j                  ¬«      } t=        d:«      D ]P  }t        j                  d;d&| t         j                  ¬«      } t        j                  d<d(| t         j                  ¬«      } ŒR t        j                  d=d>| t         j                  ¬«      } t        j                  d?d| t         j                  ¬«      } t        j                  d(d7| t         j                  ¬«      } t        j                  d@dA| t         j                  ¬«      } t        j                  dBd| t         j                  ¬«      } g }| j                  d9«      D �]¼  }|j                  «       }|sŒt        j                  dCd|«      }t        j                  dDd|«      }|j?                  dEd«      j?                  dFdG«      }t        j                  dHdG|«      }t        j                  dId|«      }tA        jB                  |«      }|j?                  dJdG«      j?                  dKdG«      }t        j                  dLd|«      }|sŒæt        j                  dM|«      rŒý‰(jE                  «       D ]  \  }}|j?                  ||«      }Œ tG        ‰)«      D ]  \  }}|j?                  dN|z  |«      }Œ t        j                  dO|t         j                  «      s*t        j                  dP|t         j                  «      sdQ|z  }|j%                  |j                  «       «       �Œ¿ d9j-                  |«      } ‰(jE                  «       D ]  \  }}| j?                  ||«      } Œ tG        ‰)«      D ]  \  }}| j?                  dN|z  |«      } Œ t        j                  dRd| «      } tA        jB                  | «      } t        j                  dSdA| «      } t        j                  dTd9| «      } t        j                  dHdG| «      } t        j                  dUd| «      } t        j                  dVdW| t         j                  t         j                  z  ¬«      } t        j                  dXd| «      } t        j                  dYd| «      } t        j                  dHdG| «      } t        j                  dTd9| «      } t=        d:«      D ]P  }t        j                  d;d&| t         j                  ¬«      } t        j                  d<d(| t         j                  ¬«      } ŒR t        j                  dZd| t         j                  ¬«      } t        j                  d[d&| t         j                  ¬«      } t=        d:«      D ]P  }t        j                  d;d&| t         j                  ¬«      } t        j                  d<d(| t         j                  ¬«      } ŒR t        j                  dZd| t         j                  ¬«      } tI        «       g }"}!| j                  d9«      D ]W  }t        j                  d\dt        j                  dId|«      «      }
|
r|
|!v rŒ6|!jK                  |
«       |"j%                  |«       ŒY d9j-                  |"«      j                  «       } g tI        «       }$}#‰'D ].  \  }%}&|%|$v rŒ|$jK                  |%«       |#j%                  |%|&f«       Œ0 | ||#fS # t0        $ r Y �Œøw xY w# t0        $ r Y �Œ†w xY w)]uR   æ­£æ–‡ HTML æ¸…æ´—ï¼šä¿�ç•™ <p>/<table>ï¼Œé™„ä»¶è½¬ <p><a>ç»�å¯¹URL</a></p> æ®µè�½r   r   z
<!--.*?-->)Úflagsz<meta[^>]*>z<script[^>]*>.*?</script>z<style[^>]*>.*?</style>u   ã€�å­—å�·ï¼š[^ã€‘]*ã€‘úhtml.parserÚaT)rV   rV   Úappendixzdata-appendixz&\.(pdf|docx?|xlsx?|zip|rar|wps|et|ofd)Úvirtual_attach_filez/module/download/ÚoldsrcÚOLDSRCz^(?:javascript:|mailto:|tel:|#)©r   Ú_titlerX   ú?õ   é™„ä»¶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#   r   u   ^é™„ä»¶[:ï¼š]\s*ri   rj   z__LINK__%d__rk   rl   rm   )rE   r   ÚmatchrD   rH   Ú
startswithr   r   r   r   ÚosÚpathÚbasenameÚsplitrM   rN   rO   rL   rJ   )	rS   rV   Ú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ÚcellspacingNÚdivÚtablec                 óf   •— ‰j                  | j                  d«      «       dt        ‰«      dz
  z  S )Nr   ú__TBL__%d__r   )rL   rE   rJ   )rS   Ú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<li\b[^>]*>z</li\s*>z</p>

z</?(?:ul|ol)\b[^>]*>z

r   z<p\b[^>]*>\s*<p\b[^>]*>z</p\s*>\s*</p\s*>z<p\b[^>]*>\s*(</p\s*>)z\1z<p\b[^>]*>\s*$z	<br\s*/?>Ú
z8</?(?:span|font|o:p|st1?:[a-z]+|strong|em|b|i|u)\b[^>]*>z(?<=>)\s*[\r\n\t]+\s*z\s*[\r\n\t]+\s*(?=<)úú	r   z	[ \t]{2,}r   õ   Â z&nbsp;z[\s\u200b\u200c\u200d\ufeff]+uš   ^[ã€�\[ï¼ˆ(]?\s*(?:è¿”å›žé¡¶éƒ¨|å›žåˆ°é¡¶éƒ¨|è¿”å›žåˆ—è¡¨|æ‰“å�°(?:æœ¬é¡µ)?|å…³é—­(?:çª—å�£)?|åˆ†äº«|æ‰«ä¸€æ‰«|ä¸Šä¸€ç¯‡|ä¸‹ä¸€ç¯‡|é¡¶éƒ¨)\s*[ã€‘\]ï¼‰)]?$r�   ú<p[ >]z<(?:table|ul|ol|h[1-6])\bz	<p>%s</p>z __(?:LINK|TBL|IMG|ATTACH)__\d+__z[ \t]+\nz\n{3,}u   å·²ä¸‹è½½\s*\d*\s*æ¬¡u   é™„ä»¶ã€�\s*(<a\b.*?</a>)\s*ã€‘z	<p>\1</p>u   é™„ä»¶ã€�\s*ã€‘z
<p>\s*</p>z<p\b[^>]*>\s*</p\s*>z<p>\s*\nr   )&r   r   rC   rD   r   Úfind_allr/   rF   r   rs   Úget_textru   rv   rw   rx   rM   rN   rO   rL   rJ   Úreplace_withÚ	decomposeÚjoinr5   r4   ÚattrsÚpopÚfindÚnameÚunwrapr)   r   r   r   rR   Ú	enumerateÚsetÚadd)*Úcontentr   Ú_souprb   rV   Ú_hrefÚ_oldsrcÚ	real_hrefrz   r{   r|   rn   ro   rp   ÚimgsÚsrcsr€   ÚtagÚattrÚdr‘   Ú	has_tableÚprevÚ_ÚpartsÚblockÚbÚplainÚkÚvÚiÚtblÚoutÚseenÚfinalÚdedupÚseen_uÚur   r}   r~   r�   s*    `                                     @@@r   Úhtml_to_textr¿   }   s  û€ áØ�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æð4	Ü! '¨=Ó9ˆEØ—^‘^ C¨d�^Ó3ó (�Ø˜‘y�Ø—E‘E˜*Ô%¨¯©¨Ô)?ÜŸ9™9Ð%NÐPTÔVX×VZÑVZÔ[Ø0°DÑ8Ð<OÐSWÒ<WØ!šZ R×.Ñ.Ó0�EØ Ÿu™u X›ÒG°!·%±%¸³/ÒGÀR×NÑNÓP�GÙ¤R§X¡XÐ.PÐRWÔY[×Y]ÑY]Ô%^Ø$)™	à$+Ò$4¨u˜	ØŸ:™:¨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Ó+ò .�ðOò .�Dà—I‘I—M‘M $¨Õ-ñ.ð.ð —^‘^ EÓ*ò �ð —6‘6˜%“=Ð(¨Q¯V©V°G«_Ð-DØŸ:™:¨D˜:Ô1¸!¿&¹&À¼-ÐPQ×PVÑPVÐWZÔP[ØŸ™�à!$˜�ØŸ™¨$˜Ô/¸¿¹¸w¼Ø !§¡ 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�^ U¨G¼2¿4¹4Ô@€GÜ�f‰f�[ *¨g¼R¿T¹TÔB€GÜ�f‰fÐ,¨f°gÄRÇTÁTÔJ€Gä�1‹Xò LˆÜ—&‘&Ð3°U¸GÌ2Ï4É4ÔPˆÜ—&‘&Ð-¨v°wÄbÇdÁdÔK‰ðLô �f‰fÐ.°°wÄbÇdÁdÔK€GÜ�f‰fÐ&¨¨G¼2¿4¹4Ô@€Gä�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ˆÙØÜ�8‰8ð  rð  tyô  zØØ ×&Ñ&Ó(ò 	 ‰DˆAˆqØ—	‘	˜!˜Q“‰Að	 ä Ó.ò 	2‰FˆAˆsØ—	‘	˜-¨!Ñ+¨SÓ1‰Að	2ô —	‘	˜) Q¬¯©Ô-ÜŸ	™	Ð">ÀÄ2Ç4Á4ÔHØ˜a‘ˆAØ�‰�Q—W‘W“YÖð1 ð4 �+‰+�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ô �&‰&Ð)¨2¨sÓ
3€CÜ
�&‰&Ð3°\À3ÌbÏdÉdÔUW×UYÑUYÉkÔ
Z€CÜ
�&‰&Ð# R¨Ó
-€CÜ
�&‰&�  CÓ
(€CÜ
�&‰&�˜s CÓ
(€CÜ
�&‰&�˜F CÓ
(€Cô �1‹Xò DˆÜ�f‰fÐ/°¸Ä2Ç4Á4ÔHˆÜ�f‰fÐ)¨6°3¼b¿d¹dÔC‰ðDô �&‰&Ð(¨"¨c¼¿¹Ô
>€CÜ
�&‰&�˜e S´·±Ô
5€Cô �1‹Xò DˆÜ�f‰fÐ/°¸Ä2Ç4Á4ÔHˆÜ�f‰fÐ)¨6°3¼b¿d¹dÔC‰ðDô �&‰&Ð(¨"¨c¼¿¹Ô
>€Cä“%˜ˆ%€DØ�Y‰Y�vÓò ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÙ�c˜T‘kØØ�‰�ŒØ�‰�Q�ðð �+‰+�eÓ
×
"Ñ
"Ó
$€Càœ›ˆ6€EØò ‰ˆˆ1Ø�‰;ØØ�
‰
�1ŒØ�‰�a˜�VÕð	ð �	˜5Ð Ð øôq ò 	Úð	ûôT ò 	Úð	úsG   Ã-A7y( Å%F+y( Ì:y( Íy( ÍCy( Ð<E y( ×D;y8 ù(	y5ù4y5ù8	zúzc                 ó2  — dx}x}}d }t         �r	 t        | d«      }|j                  ddt        j                  dt        j                  «      i¬«      }|r|j                  d«      rt        |d   «      }|j                  ddt        j                  dt        j                  «      i¬«      }|r�|j                  d«      rpt        j                  d	|d   «      }|rU|j                  d
«      ›d|j                  d«      j                  d«      ›d|j                  d«      j                  d«      ›�}|s/|j                  d«      }	|	rt        |	j                  dd¬«      «      }|sW|j                  d«      }
|
rDt        |
j                  d¬«      «      }t        j                  dd|«      j                  «       xs |}|j                  d«      }|€$|j                  d«      xs |j                  d«      }|�"dj                  d„ |j                  D «       «      }|smt        j                  d| «      }|rU|j                  d
«      ›d|j                  d«      j                  d«      ›d|j                  d«      j                  d«      ›�}|||fS # t         $ r d }Y Œ�w xY w)Nr   ra   ÚmetarŸ   ÚArticleTitle)rœ   r¤   ÚPubDatez(\d{4})-(\d{1,2})-(\d{1,2})r   rA   r#   r   Úh1r   Trg   rX   u8   [-â€”|]\s*æ±ŸåŸŽå“ˆå°¼æ—�å½�æ—�è‡ªæ²»åŽ¿äººæ°‘æ”¿åºœ\s*$zdiv.article_detailzdiv.vsbcontentz#vsb_contentc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)r5   )Ú.0Úcs     r   ú	<genexpr>zparse_detail.<locals>.<genexpr>u  s   è ø€ Ò&C°!¤s¨1§vÑ&Cùs   ‚u'   (\d{4})[-å¹´/](\d{1,2})[-æœˆ/](\d{1,2}))r   rž   r   ÚcompilerD   r/   r   rF   rE   rK   r˜   r   r   Ú
select_oner›   Úcontentsr4   )rQ   r   rX   rZ   Úcontent_htmlÚsoupÚmtÚmdrY   rÄ   Úttr   Úels                r   Úparse_detailrÒ   Z  s0  € Ø"$Ð$€EÐ$ˆD�<Ø€DÞð	Ü  ¨MÓ:ˆDØ—‘˜6¨&´"·*±*¸_ÌbÏdÉdÓ2SÐ)T�ÓUˆBÙ�b—f‘f˜YÔ'Ü# B y¡MÓ2�Ø—‘˜6¨&´"·*±*¸ZÌÏÉÓ2NÐ)O�ÓPˆBÙ�b—f‘f˜YÔ'Ü—Y‘YÐ=¸rÀ)¹}ÓM�ÙØ)+¯©°!­°b·h±h¸q³k×6GÑ6GÈÕ6JÈBÏHÉHÐUVËK×L]ÑL]Ð^_ÔL`Ða�DÙØ—Y‘Y˜t“_�ÙÜ'¨¯©°C¸t¨Ó(DÓE�EÙØ—Y‘Y˜wÓ'�ÙÜ# B§K¡K°d KÓ$;Ó<�AÜŸF™FÐ#^Ð`bÐdeÓf×lÑlÓnÒsÐrs�EØ—‘Ð!5Ó6ˆBØˆzØ—_‘_Ð%5Ó6ÒY¸$¿/¹/È.Ó:Y�Øˆ~Ø!Ÿw™wÑ&C°r·{±{Ô&CÓC�ñ Ü�Y‰YÐAÀ9ÓMˆÙØ!#§¡¨!¥¨b¯h©h°q«k×.?Ñ.?ÀÕ.BÀBÇHÁHÈQÃK×DUÑDUÐVWÔDXÐYˆDØ�$˜Ð$Ð$øô ò 	ØŠDð	ús   ‘HJ ÊJÊJ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¬«       dx}x}}t        «       }g }g }t        }t!        dt        dz   «      D �]Þ  }t#        |«      }	|	st        d|z  d¬«        �n¾t%        |	«      }
|
st        d|z  d¬«        �nžt'        j(                  d	|	«      }t        d
|t+        |
«      |r9d|j-                  d«      ›d|j-                  d«      ›d|j-                  d«      ›d�nd|j/                  t0        d«      fz  d¬«       |
D �]Ã  \  }}}||v rŒ|j3                  |«       |r|t        k  r|dz  }Œ/t#        |«      }|s|dz  }ŒBt5        ||«      \  }}}|s|}|s|}t7        ||«      \  }}}t+        t'        j8                  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t@        |r-tC        jD                  |D ��cg c]
  \  }}||dœ‘Œ c}}d¬«      nddœ}tF        r|jI                  |«       n|jI                  |«       |dz  }t        d|d d |||rdnd|rdt+        |«      z  ndfz  d¬«       tK        jL                  d «       �ŒÆ tF        s|r | |t        ¬!«       g }tO        |	|«      }|r||v rt        d"d¬«        n|}tK        jL                  d#«       �Œá tF        rltQ        tF        d$d%¬&«      5 }|D ]+  }|jS                  tC        jD                  |d¬«      d'z   «       Œ- 	 d d d «       t        d(tF        t+        |«      fz  d¬«       n|r | |t        ¬!«       t        d)|||fz  d¬«       t        d*t        z  d¬«       y c c}}w # 1 sw Y   ŒgxY w)+Nr   )Úpush_to_searchdbz"=== %s (%s) pages=%d cutoff=%s ===Tr%   r   zPage %d fetch error, stopzPage %d: empty, stopu   å…±(\d+)æ�¡\s+(\d+)/(\d+)zPage %d: found %d items%s [%s]u    é¡µç �r#   ú/r   u    å…±u   æ�¡r   r   r–   z<a[ >]r   z  skip empty/placeholder: %sé(   )rX   r9   F)Úensure_ascii)Ú	site_nameÚ
source_urlr9   rX   Úpub_dateÚsummaryr¤   ÚcategoryÚtagsÚ
group_namer}   u     + %s (%s, %då­—%s%s)é$   u   , è¡¨æ ¼u
   , é™„ä»¶%dgš™™™™™É?)Úbatch_labelu     â†’ æ— ä¸‹é¡µï¼Œå�œæ­¢g333333Ó?Úwr   )r2   r’   zJSONL written: %s (%d rows)u*   æ–°å¢ž: %d | è·³è¿‡: %d | CUTOFFæˆªæ–­: %dz=== %s done ===)*Úsysrv   Úinsertru   ÚdirnameÚabspathÚ__file__Úcrawler_librÔ   r8   Ú	SITE_NAMEÚSCRIPT_NAMEÚ_PAGESÚCUTOFFr¢   ÚLIST_URLr)   r?   r[   r   rF   rJ   rE   r   rP   r£   rÒ   r¿   r   r   rD   ÚCATEGORYÚ
GROUP_NAMEÚjsonÚdumpsr   rL   r6   r7   r^   ÚopenÚwrite)rÔ   Ú	new_countÚ
skip_countÚcutoff_countÚ	seen_urlsÚ
jsonl_rowsÚbatchr9   ÚpagerQ   rR   Únavr{   rX   rZ   ÚdhtmlÚdtitleÚddaterÌ   r¤   r®   ÚattsÚ	plain_lenÚno_parar¾   r   ÚitemÚnxÚfÚrows                                 r   Úmainr    s  € Ü‡H�H‡O�O�A”r—w‘w—‘¤r§w¡w§¡´xÓ'@ÓAÔBÝ,ä	Ð
.´)¼[Ì&ÔRXÐ1YÑ
YØõð -.Ð-€IÐ-�
˜\Ü“€IØ€JØ€Eä
€CÜ�aœ !™Ó$ó AˆÜ˜#“Jˆ	ÙÜÐ-°Ñ4¸DÕAÚÜ˜9Ó%ˆÙÜÐ(¨4Ñ/°tÕ<ÚÜ�i‰iÐ4°iÓ@ˆÜÐ.Ø”#�e“*ÚVY¨¯	©	°!­°c·i±iÀµlÀCÇIÁIÈaÅLÑQÐ_aØ�K‰Kœ "Ó%ð2'ñ 'ð /3õ	4ð
 %*ó (	Ñ ˆG�U˜DØ˜)Ñ#ØØ�M‰M˜'Ô"Ù˜œvšØ Ñ!�ØÜ˜'“NˆEÙØ˜a‘�
ØÜ*6°u¸gÓ*FÑ'ˆF�E˜<ÙØ�ÙØ�Ü'3°LÀ'Ó'JÑ$ˆG�Y ÜœBŸF™F :¨r°7Ó;×AÑAÓCÓDˆIÜŸ9™9 Y°¼¿¹Ó>Ð>ò UÜ!Ÿy™y¨°G¼R¿T¹TÓBÐBòUØKTÀ}ð à˜1Š}¡ÜÐ4°v¸c¸r°{ÑBÈ$ÕOØ˜a‘�
Ùä&°gÀgØ¨U¸rØ"´À"Ü(áVZô  $Ÿz™zØ8<×=±°°1˜q¨Ó+Ó=ÈEõ SØ`bñˆDõ Ø×!Ñ! $Õ'à—‘˜TÔ"Ø˜‰NˆIÜÐ*¨f°S°b¨k¸5À)Ù;D©ZÈ"ÙIM¨\¼CÀ»IÒ-EÐSUð.Wñ Wà^bõdô �J‰J�sŽOðQ(	õR ™eÙ˜U´Õ<ØˆEä˜9 cÓ*ˆÙ�R˜9‘_ÜÐ,°DÕ9ÙØˆÜ�
‰
�3ŽðCAõF Ü”*˜c¨GÔ4ð 	D¸Ø!ò D�Ø—‘œŸ
™
 3°UÔ;¸dÑBÕCñD÷	Dô 	Ð+¬z¼3¸z»?Ð.KÑKÐSWÖXáÙ˜U´Õ<ä	Ð
6¸)ÀZÐQ]Ð9^Ñ
^ÐfjÕkÜ	Ð
œiÑ
'¨tÖ4ùóA >÷.	Dð 	Dús   Ê6Q"Î01QÑQÚ__main__)é   )1Ú__doc__râ   ru   r   r6   rï   Úhtmlr   Úurllib.parserM   r   r   Úbs4r   ÚImportErrorÚenvironr/   r   r1   rè   rî   ré   rí   rP   rì   rG   ÚnowÚstrftimerë   r(   Ú
_MAX_PAGESr¡   Úargvr·   rb   rt   Úintrx   Ú
ValueErrorrJ   rê   r   r?   r[   r^   r¿   rÒ   r  Ú__name__© r   r   ú<module>r     s¢  ðñ÷( ?× >× >Ó >ß (ðÝ!ð �Z‰Z�^‰^˜L¨"Ó-€
Ø€à0€	Ø€
Ø!€Ø€Ø#€Ø1€Ø€Ø
ˆ(�,‰,‹.™9¨'Ô2Ñ
2×	<Ñ	<¸ZÓ	H€ðCàOØ'ñ	€ð €
Ù�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€ò
óò&ò*òZ!òz"%òJZ5ðz ˆzÒÙ…Fð øðA ò ØƒMðûð6 ò 	Ùð	ûð
 ò 	Ùð	ús5   ¨D9 Â6EÃ2EÄ9EÅEÅEÅEÅEÅE