Ë
    ðísjwE  ã                   óp  — 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
Z
ddlZddlZ ej                  ej                  j                  «       dZdZdZdZdZ	 ddlmZ ej0                  j3                  d	d
«      Zej0                  j3                  dd«      ZdZddddœZdZ eej@                  «      D ]3  \  Z!Z"e"jG                  d«      sŒ	  e$e"jK                  dd«      d   «      ZŒ5 edk\  rendZ'd„ Z(dd„Z)d„ Z*d„ Z+da,da-d„ Z.d„ Z/d„ Z0d„ Z1e2dk(  r e1«        yy# e$ r dZY ŒÇw xY w# e&$ r Y Œ~w xY w)uJ  
å¯Ÿå�³å�Žæ——-ç¤¾ä¼šå…¬å‘Š (cyhq.gov.cn)
åˆ—è¡¨: é¦–é¡µæœ�åŠ¡ç«¯æ¸²æŸ“ ul.long_list_col > li > a (/shgg/{docno}.html)
ç¿»é¡µ: POST https://www.cyhq.gov.cn/rmt/tmpl/api/site/{siteId}/channelid/{channelId}
      body: {"currpage":N,"pagesize":10,"params":"<é¡µé�¢å†…è�”544å­—ç¬¦ä¸²>"}
è¯¦æƒ…: /shgg/{docno}.html, æ­£æ–‡ div#content
é    Nzhttp://www.cyhq.gov.cnu   å¯Ÿå�³å�Žæ——-ç¤¾ä¼šå…¬å‘Šu	   å†…è’™å�¤zcrawl_cyhq_shgg.pyu   çŽ¯è¯„å…¬ç¤º)ÚBeautifulSoupÚDB_PATHz/mnt/data/search.dbÚ
JSONL_PATHÚ úutf-8zkMozilla/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=ú=c                 ó2  — | syt        j                  | «      } | j                  dd«      j                  dd«      j                  dd«      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*ú\s+ú )Úhtml_libÚunescapeÚreplaceÚreÚsubÚstrip)Úts    ú$/root/gov_crawler/crawl_cyhq_shgg.pyÚclean_titler   -   s‚   € ÙØÜ×Ñ˜!Ó€AØ	�	‰	�(˜BÓ×'Ñ'¨°"Ó5×=Ñ=¸hÈÓK×SÑSÐT\Ð^`Óa€AÜ
�‰ÐEÀrÈ1ÓM€AÜ
�‰ˆv�s˜AÓ€AØ�7‰7‹9Ðó    c                 ó”  — t        t        «      }|r||d<   d }t        d«      D ]h  }	 t        j                  | ||d¬«      }|j
                  dk(  rt        |_        |j                  c S d|j
                  z  }t        j                  d«       Œj t        d	| d d
 ›d|›�d¬«       y # t        $ r}t        |«      d d }Y d }~ŒJd }~ww xY w)NÚRefereré   F©ÚheadersÚtimeoutÚverifyéÈ   zHTTP %séP   é   z  [fetch fail] éZ   z -> T©Úflush)ÚdictÚHEADERSÚrangeÚrequestsÚgetÚstatus_codeÚENCÚencodingÚtextÚ	ExceptionÚstrÚtimeÚsleepÚprint)ÚurlÚrefererr   ÚhÚlast_errÚ_ÚrÚes           r   Úfetchr:   7   sº   € ÜŒW‹€AÙØˆˆ)‰Ø€HÜ�1‹Xò 	ˆð	#Ü—‘˜S¨!°WÀUÔKˆAØ�}‰} Ò#Ü �”
Ø—v‘v’Ø  1§=¡=Ñ0ˆHô 	�
‰
�1�ð	õ 
 s¨3¨B¢x±Ð
:À$ÕGØøô	 ò 	#Ü˜1“v˜c˜r�{�Hûð	#ús   ¨>B&Á)B&Â&	CÂ/CÃCc           
      ó4  ‡‡ ‡!‡"— | 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        j                  d	d| «      } t        �r‚	 t	        | d
«      }|j                  dd¬«      D �]>  }|j                  d«      sG|j                  d«      s6t        j                  d|j                  dd«      t         j                  «      sŒ\|d   }|j                  d«      xs |}|j                  d¬«      xsW |j                  d«      xsD |j                  d«      xs1 t        j                  j                  |j                  d«      d   «      }t        j                  j                  ‰|«      }‰ j!                  ||f«       dt#        ‰!«      z  }d|›d|›d�‰!|<   |j%                  |«       �ŒA |j                  d«      D ]_  }	|	j                  d«      xs |	j                  d«      xs d}
d|
j'                  «       v sd|
j'                  «       v sŒP|	j)                  «        Œa |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 �]8  }	|	j                  d«      xs |	j                  d«      xs d}
|
rd|
j'                  «       v rŒAt        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&}|	j.                  }|�!|j0                  dk(  rd}n|j.                  }|�Œ!|rd|›d|›d�‰!|<   nd'|›d|›d(�‰!|<   |	j%                  |«       �Œ; t3        |«      } t        j                  d)d*| t         j                  t         j                  z  ¬«      } ˆ ˆ!ˆfd+„}t        j                  d,|| t         j                  t         j                  z  ¬«      } t        rQ	 t	        | d
«      }|j                  d«      D ]%  }d-D ]  }|j6                  j9                  |d «       Œ  Œ' t3        |«      } g Š"ˆ!ˆ"fd.„}t        j                  d/| t         j                  «      rd0nd}t        j                  d1|| t         j                  t         j                  z  ¬«      } t        j                  d%d2| t         j                  ¬«      } t        j                  d3d4| t         j                  ¬«      } t        j                  d5d| t         j                  ¬«      } g }| j                  d6«      D �]}  }|j+                  «       }|sŒt        j                  d7d|«      }t        j                  d8d|«      }|j;                  d9d«      j;                  d:d;«      }t        j                  d<d;|«      }t        j                  d=d|«      }t=        j>                  |«      }|j;                  d>d;«      j;                  d?d;«      }t        j                  d@d|«      }|sŒæt        j                  dAd|t         j                  ¬«      }‰!jA                  «       D ]  \  }}|j;                  ||«      }Œ tC        ‰"«      D ]  \  }}|j;                  dB|z  |«      }Œ |j!                  |j+                  «       «       �Œ€ d6j-                  |«      }‰!jA                  «       D ]  \  }}|j;                  ||«      }Œ tC        ‰"«      D ]  \  }}|j;                  dB|z  |«      }Œ t        j                  dCd|«      }t        j                  dDd|«      }t        j                  dEd|«      }t        j                  dFd|«      }t=        j>                  |«      }t        j                  dGd4|«      }t        j                  dHd6|«      }t        j                  d<d;|«      }tE        «       }g }|j                  d6«      D ]X  }t        j                  dIdt        j                  d=d|«      «      }|sŒ2||v rŒ7|jG                  |«       |j!                  |«       ŒZ d6j-                  |«      j+                  «       }||‰ fS # t4        $ r Y �Œw xY w# t4        $ r Y �ŒCw xY w)JNr   r   z
<!--.*?-->©Úflagsz<meta[^>]*>z<script[^>]*>.*?</script>z<style[^>]*>.*?</style>u   ã€�å­—å�·ï¼š[^ã€‘]*ã€‘u'   å�‘å¸ƒ(?:æ—¶é—´|æ—¥æœŸ)[:ï¼š][^<]{0,30}úhtml.parserÚaT)ÚhrefÚappendixzdata-appendixz\.(pdf|docx?|xlsx?|zip|rar|wps)r@   Úoldsrc)r   Ú_titleÚtitleú?z__ATTACH__%d__ú	<a href="ú" target="_blank">ú</a>ÚimgÚsrczfileTypeImages/icon_ÚfiletypeimagesÚpÚaltu   å›¾ç‰‡z__IMG__%d__ú<p>z<br/>ú</p>Fz<p><a href="z</a></p>z&<a\s+name="OLE_LINK\d+"[^>]*>(.*?)</a>z\1c                 ó6  •— | j                  d«      }|j                  d«      ry| 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:r   r!   ú<[^>]+>u   ^é™„ä»¶[:ï¼š]\s*rE   r   u   é™„ä»¶z__LINK__%d__rF   rG   rH   )ÚgroupÚ
startswithr   r   r   r   r   ÚosÚpathÚbasenameÚsplitÚurllibÚparseÚurljoinÚappendÚlen)	Úmr@   ÚinnerÚtxtÚabs_urlÚkeyÚattachmentsÚlink_protectÚpage_urls	         €€€r   Ú
_link_replz html_to_text.<locals>._link_repl�   sç   ø€ Ø�w‰w�q‹zˆØ�?‰?˜=Ô)ØØ—‘˜“
ˆÜ�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ÚcellspacingÚ
indenttextÚnoextractcontentÚwzadesÚtabindexc                 óZ  •— | j                  d«      }‰j                  «       D ]I  \  }}|j                  d«      sŒ|j                  ||j                  dd«      j                  dd«      «      }ŒK t	        j
                  dd|t        j                  ¬«      }t	        j
                  dd|t        j                  ¬«      }t	        j
                  d	d|t        j                  ¬«      }t	        j
                  d
d|t        j                  ¬«      }‰j                  |«       dt        ‰«      dz
  z  S )Nr   Ú__IMG__rN   r   rO   ú(</?(?:span|font|o:p|st1?:[a-z]+)\b[^>]*>r<   z<p>\s*(?:(?:\r?\n)\s*)*<p>z</p>\s*(?:(?:\r?\n)\s*)*</p>z<p>\s*(?:(?:\r?\n)\s*)*</p>ú__TBL__%d__r	   )	rR   ÚitemsrS   r   r   r   ÚIr[   r\   )r]   ÚtblÚkÚvrc   Útable_protects       €€r   Ú	_tbl_replzhtml_to_text.<locals>._tbl_repl¬   sî   ø€ Ø�g‰g�a‹jˆØ ×&Ñ&Ó(ò 	O‰DˆAˆqØ�|‰|˜IÕ&Ø—k‘k ! Q§Y¡Y¨u°bÓ%9×%AÑ%AÀ&È"Ó%MÓN‘ð	Oô �f‰fÐ@À"ÀcÔQS×QUÑQUÔVˆÜ�f‰fÐ2°E¸3ÄbÇdÁdÔKˆÜ�f‰fÐ4°f¸cÌÏÉÔNˆÜ�f‰fÐ3°R¸ÄBÇDÁDÔIˆØ×Ñ˜SÔ!Ø¤ MÓ 2°QÑ 6Ñ7Ð7r   z<table[^>]*>r	   z<table[^>]*>.*?</table>z</p>

z	<br\s*/?>ú
rw   z

z(?<=>)\s*[\r\n\t]+\s*z\s*[\r\n\t]+\s*(?=<)úú	r   z	[ \t]{2,}rQ   õ   Â z&nbsp;z[\s\u200b\u200c\u200d\ufeff]+z
<p>\s*</p>rx   z__LINK__\d+__z__TBL__\d+__z__IMG__\d+__z__ATTACH__\d+__z[ \t]+\nz\n{3,}r   )$r   r   ÚSrz   r   Úfind_allr)   ÚsearchÚget_textrT   rU   rV   rW   rX   rY   rZ   r[   r\   Úreplace_withÚlowerÚ	decomposer   ÚjoinÚparentÚnamer/   r.   ÚattrsÚpopr   r   r   ry   Ú	enumerateÚsetÚadd)#Úcontentrd   Ú_soupr?   r@   Ú	real_hrefr_   r`   ra   rI   rJ   rL   ÚimgsÚsrcsÚhas_p_ancestorÚ_parre   ÚtagÚattrr   Ú	has_tableÚpartsÚblockÚbÚplainr|   r}   Úir{   ÚoutÚseenÚfinalrb   rc   r~   s#    `                              @@@r   Úhtml_to_textr¥   J   sR	  û€ ÙØ�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Ü�f‰fÐ?ÀÀWÓM€Gæð3	Ü! '¨=Ó9ˆEØ—^‘^ C¨d�^Ó3ó 	(�Ø—5‘5˜Ô$¨¯©¨oÔ(>Ä"Ç)Á)ÐLnÐpq×puÑpuÐv|ð  Aó  qBô  DF÷  DHñ  DHõ  CIØ˜V™9�DØ !§¡ h£Ò 7°4�IØŸ*™*¨4˜*Ó0ò  C°A·E±E¸(³Oò  CÀqÇuÁuÈWÃ~ò  CÔY[×Y`ÑY`×YiÑYiÐjs×jyÑjyÐz}Ój~ð  @Añ  kBó  ZC�CÜ$Ÿl™l×2Ñ2°8¸YÓG�GØ×&Ñ&¨° ~Ô6Ø*¬S°Ó->Ñ>‘CÚQXÒZ]Ð(^�L Ñ%Ø—N‘N 3Ö'ð	(ð —~‘~ eÓ,ò $�Ø—w‘w˜u“~Ò@¨¯©°Ó):Ò@¸b�Ø)¨S¯Y©Y«[Ñ8Ð<LÐPS×PYÑPYÓP[Ò<[Ø—M‘M•Oð$ð —^‘^ CÓ(ó ,�Ø—z‘z %Ó(�Ú §
¡
° 
Õ 6Ø�DØ#ò `˜Ø!Ÿg™g e›nÒG°·±¸Ó0AÒGÀR˜ÚÜ&,§l¡l×&:Ñ&:¸8ÀSÓ&I˜GØ#&§7¡7¨5£>Ò#K°S·W±W¸WÓ5EÒ#KÈ×"RÑ"RÓ"Tò  #HÔXZ×X_ÑX_×XhÑXhÐil×irÑirÐsvÓiwÐxyÑizÓX{ò  #Hð  @H˜CØ ŸKšKÒQXÒZ]Ð(^Õ_ð`ó Ø+¬c°,Ó.?Ñ?˜Ø,1°G·L±LÀÓ4FÑ,FÈÑ,O˜ SÑ)ØŸ™ sÖ+ð,ð —~‘~ eÓ,ó &�Ø—g‘g˜e“nÒ?¨¯©°Ó(9Ò?¸R�ÙÐ4¸¿	¹	»ÑCØÜ Ÿ,™,×.Ñ.¨x¸Ó=�Ø—w‘w˜u“~Ò?¨¯©°Ó)9Ò?¸R×FÑFÓHÒ{ÌBÏGÉG×L\ÑL\Ð]`×]fÑ]fÐgjÓ]kÐlmÑ]nÓLoÒ{Ðs{�Ø#¤c¨,Ó&7Ñ7�Ø!&�Ø—z‘z�ØÐ&Ø—y‘y CÒ'Ø)-˜ØØŸ;™;�Dð	 Ñ&ò
 "ÚQXÒZ]Ð(^�L Ò%ð "ò Y`ÒadÐ(e�L Ñ%Ø× Ñ  Ö%ð%&ô& ˜%“jˆGô �f‰fÐ>ÀÀwÔVX×VZÑVZÔ]_×]aÑ]aÑVaÔb€Göô �f‰fÐ>À
ÈGÔ[]×[_Ñ[_Ôbd×bfÑbfÑ[fÔg€Gåð	Ü! '¨=Ó9ˆEØ—~‘~ dÓ+ò .�ð Dò .�DØ—I‘I—M‘M $¨Õ-ñ.ð.ô ˜%“jˆGð €Mõ
8ô —Y‘Y˜°¼¿¹Ô>‘ÀA€IÜ�f‰fÐ/°¸GÌ2Ï4É4ÔRT×RVÑRVÉ;ÔW€Gä�f‰f�W˜j¨'¼¿¹Ô>€GÜ�f‰f�\ 4¨¼¿¹Ô=€GÜ�f‰fÐ@À"ÀgÔUW×UYÑUYÔZ€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ˆÙØÜ�F‰F�= " a¬r¯t©tÔ4ˆØ ×&Ñ&Ó(ò 	 ‰DˆAˆqØ—	‘	˜!˜Q“‰Að	 ä Ó.ò 	2‰FˆAˆsØ—	‘	˜-¨!Ñ+¨SÓ1‰Að	2à�‰�Q—W‘W“YÖð' ð* �+‰+�eÓ
€CØ×"Ñ"Ó$ò  ‰ˆˆ1Ø�k‰k˜!˜QÓ‰ð ä˜MÓ*ò 2‰ˆˆ3Ø�k‰k˜-¨!Ñ+¨SÓ1‰ð2ô �&‰&Ð! 2 sÓ
+€CÜ
�&‰&� " cÓ
*€CÜ
�&‰&� " cÓ
*€CÜ
�&‰&Ð# R¨Ó
-€Cä
×
Ñ
˜CÓ
 €CÜ
�&‰&�˜d CÓ
(€CÜ
�&‰&�˜F CÓ
(€CÜ
�&‰&�˜s CÓ
(€Cä‹5€DØ€EØ�Y‰Y�vÓò ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÙØØ�$‰;ØØ�‰�ŒØ�‰�Q�ðð �+‰+�eÓ
×
"Ñ
"Ó
$€Cà�	˜;Ð&Ð&øôK ò 	Úð	ûô: ò 	Úð	úsS   ÄA:i: Å?Ei: Ë:i: Ìi: Ì1i: ÍB)i: Ï1Ei: Õ:i: ØAj
 é:	jêjê
	jêjc                 óþ  — d}d}d}t        j                  d| «      }|rt        |j                  d«      «      }|sRt        j                  d| t         j                  t         j
                  z  «      }|rt        |j                  d«      «      }t        j                  d| «      }|rU|j                  d«      ›d|j                  d«      j                  d«      ›d|j                  d«      j                  d«      ›�}t        rzt        | d	«      }|j                  d
«      xs7 |j                  d«      xs$ |j                  d«      xs |j                  d«      }|r"dj                  d„ |j                  D «       «      }|||fS )Nr   z)<meta name="ArticleTitle" content="(.*?)"r	   z<title>(.*?)</title>u'   (\d{4})[-å¹´/](\d{1,2})[-æœˆ/](\d{1,2})ú-r!   r   r>   zdiv#contentspanzdiv#contentzdiv#zoomzdiv.articlec              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)r/   )Ú.0Úcs     r   ú	<genexpr>zparse_detail.<locals>.<genexpr>  s   è ø€ Ò"?¨a¤3 q§6Ñ"?ùs   ‚)r   r†   r   rR   r„   rz   Úzfillr   Ú
select_oner‹   Úcontents)	Ú	html_textrd   rD   ÚdateÚcontent_htmlr]   ÚdmÚsoupÚels	            r   Úparse_detailrµ   ó   sN  € Ø€EØ€DØ€LÜ
�	‰	Ð>À	ÓJ€AÙÜ˜AŸG™G A›JÓ'ˆÙÜ�I‰IÐ-¨y¼"¿$¹$ÄÇÁ¹+ÓFˆÙÜ §¡¨£
Ó+ˆEÜ	�‰Ð=¸yÓ	I€BÙ	ØŸX™X a�[¨"¯(©(°1«+×*;Ñ*;¸AÕ*>ÀÇÁÈÃ×@QÑ@QÐRSÔ@TÐUˆÝÜ˜Y¨Ó6ˆØ�_‰_Ð.Ó/ò  S°4·?±?À=Ó3Qò  SÐUY×UdÑUdÐeoÓUpò  SÐtx÷  uDñ  uDð  ERó  uSˆÙØŸ7™7Ñ"?°2·;±;Ô"?Ó?ˆLØ�$˜Ð$Ð$r   c            	      óÐ  — t        j                  t        dz   t        dd¬«      } t        | _        | j                  }t        j                  d|t        j                  «      }|st        j                  d|«      }|r|j                  d«      at        j                  d|«      }|st        j                  d	|«      }|r{|j                  d
k(  r'd|j                  d«      ›d|j                  d
«      ›�anE|j                  d«      at        j                  d«      r	dt        z   at        j                  dd«      at!        dt        dt#        t        xs d«      d¬«       t        t        fS )u'   ä»Žé¦–é¡µæ��å�– siteId/channelId/paramsú/shgg/é   Fr   z?Pagination\.init\s*\(\s*{[^}]*?params\s*:\s*['\"]([^'\"]+)['\"]z.params[\"']?\s*[:=]\s*[\"']([^\"']{100,})[\"']r	   z0/tmpl/api/site/([0-9a-f]+)/channelid/([0-9a-f]+)z4dataurl[\"']?\s*[:=]\s*[\"']([^\"']*tmpl/api[^\"']*)r!   z*https://www.cyhq.gov.cn/rmt/tmpl/api/site/z/channelid/ú/zhttps://www.cyhq.gov.cn/rmtzhttp://zhttps://z  api:z| params len:r   Tr#   )r(   r)   ÚBASE_URLr&   r+   r,   r-   r   r†   r„   rR   Ú_PARAMSÚ	lastindexÚ_API_URLrS   r   r2   r\   )r8   r   r]   Úm2s       r   Úget_api_infor¿     s  € ô 	�‰”X Ñ(´'À2ÈeÔT€AÜ€A„JØ	�‰€Aä
�	‰	ÐTÐVWÔY[×Y]ÑY]Ó^€AÙÜ�I‰IÐGÈÓKˆÙØ—'‘'˜!“*ˆä	�‰ÐFÈÓ	J€BÙÜ�Y‰YÐNÐPQÓRˆÙ	Ø�<‰<˜1ÓàVX×V^ÑV^Ð_`ÕVaÐce×ckÑckÐlmÔcnÐo‰Hà—x‘x “{ˆHÜ×"Ñ" 3Ô'Ø8¼8ÑC�Ü×'Ñ'¨	°:Ó>ˆHÜ	ˆ(”H˜o¬s´7²=¸bÓ/AÈÕNÜ”WÐÐr   c                 óh  — t         �t        €t        «        t         rt        syt        j                  | dt        dœd¬«      }t        t        «      }d|d<   t        dz   |d	<   d }t        d
«      D ]W  }	 t        j                  t         |j                  d«      |dd¬«      }	 t        j                  |j                  «       d¬«      c S  t#        d| |fz  d¬«       y# t        $ r |j                  cY c S w xY w# t        $ r}t        |«      d d }Y d }~nd }~ww xY wt        j                   d«       ŒÄ)Nr   é
   )ÚcurrpageÚpagesizeÚparamsF©Úensure_asciizapplication/jsonzContent-Typer·   r   é   r   r¸   )Údatar   r   r   éd   r   z!  [fetch_list fail] page %d -> %sTr#   )r½   r»   r¿   ÚjsonÚdumpsr%   r&   rº   r'   r(   ÚpostÚencoder.   r-   r/   r0   r1   r2   )ÚpageÚbodyr5   r6   r7   r8   r9   s          r   Ú
fetch_listrÐ   +  s  € ô Ðœ7˜?ÜŒÝ�wØÜ�:‰: 4°RÄ7ÑKÐZ_Ô`€DÜŒW‹€AØ*€A€nÑÜ˜hÑ&€A€i�LØ€HÜ�1‹Xò 	ˆð	$Ü—‘œh¨T¯[©[¸Ó-AÈ1ÐVXÐafÔgˆAðÜ—z‘z !§&¡&£(¸Ô?Ò?ð		ô 
Ð
-°°xÐ0@Ñ
@ÈÕMØøô ò Ø—v‘v”ðûäò 	$Ü˜1“v˜d˜s�|�Hûð	$úä�
‰
�1�s6   Á4-C:Â"$CÃC7Ã2C:Ã6C7Ã7C:Ã:	DÄDÄDc                 ó  — g }| j                  «       j                  d«      �rB	 t        j                  | «      }|j	                  dg «      xs g D �]  }|j	                  d«      xs |j	                  d«      xs d}|j	                  d«      xs d}|j	                  d«      xs |j	                  d«      xs d}|r|sŒnt
        ›d	|›d
�}d}|rvt        j                  dt        |«      «      }	|	rU|	j                  d«      ›d|	j                  d«      j                  d«      ›d|	j                  d«      j                  d«      ›�}|j                  |t        |«      |f«       �Œ |S t        j                  d| «      D ]Ô  }|j                  d«      |j                  d«      j                  «       }}t        |«      }|sŒAt         j"                  j%                  t
        |«      }d}t        j                  d| t'        d| j)                  |«      dz
  «      | j)                  |«      dz    «      }	|	r|	j                  d«      }|j                  |||f«       ŒÖ |S # t        $ r&}
t        dt        |
«      d d d¬«       g cY d }
~
S d }
~
ww xY w)Nú{rÈ   ÚdocnoÚidr   rD   Ú	inputTimeÚ
createTimer·   z.htmlz!(\d{4})[-/](\d{1,2})[-/](\d{1,2})r	   r§   r!   r   z  json parse err:é<   Tr#   z6<a[^>]*href="(/shgg/\d+\.html)"[^>]*>([^<]{4,100})</a>z(\d{4}-\d{2}-\d{2})r   r   rÉ   )r   rS   rÊ   Úloadsr)   rº   r   r†   r/   rR   r¬   r[   r   r.   r2   ÚfinditerrX   rY   rZ   ÚmaxÚfind)r¯   ry   ÚdÚitrÓ   rD   Útsr`   r°   r²   r9   r]   Úrels                r   Ú
parse_listrà   E  s7  € Ø€EØ‡�Ó×#Ñ# CÕ(ð	Ü—
‘
˜9Ó%ˆAØ—e‘e˜F BÓ'Ò-¨2ó B�ØŸ™˜w›Ò=¨2¯6©6°$«<Ò=¸2�ØŸ™˜w›Ò-¨2�Ø—V‘V˜KÓ(ÒF¨B¯F©F°<Ó,@ÒFÀB�Ù¡EØÞ/7ºÐ?�Ø�ÙÜŸ™Ð#GÌÈRËÓQ�BÙØ-/¯X©X°a­[¸"¿(¹(À1»+×:KÑ:KÈAÕ:NÐPR×PXÑPXÐYZÓP[×PaÑPaÐbcÔPdÐe˜Ø—‘˜g¤{°5Ó'9¸4Ð@ÖAðBð ˆLô
 �[‰[ÐRÐT]Ó^ò 
-ˆØ—W‘W˜Q“Z §¡¨£×!1Ñ!1Ó!3ˆUˆÜ˜EÓ"ˆÙØÜ—,‘,×&Ñ&¤x°Ó5ˆØˆÜ�Y‰YÐ-¨y¼¸QÀ	ÇÁÈsÓ@SÐTWÑ@WÓ9XÐYb×YgÑYgÐhkÓYlÐmpÑYpÐ/qÓrˆÙØ—8‘8˜A“;ˆDØ�‰�g˜u dÐ+Õ,ð
-ð €Løô ò 	ÜÐ%¤s¨1£v¨c¨r {¸$Õ?Ø�Iûð	ús   ¤E I É	JÉI>É8JÉ>Jc                  ó,  — d} d}t        «       }g }g }t        «        t        dt        dz   «      D �]‘  }	 t	        |«      }t        |«      }|st        d|z  d¬«        �net        d|t        |«      fz  d¬«       |D �]¬  \  }	}
}|	|v rŒ|j                  |	«       t        |	«      }|s|dz  }Œ1t        ||	«      \  }}}|s|
}|s|}t        ||	«      \  }}}t        t        j                  dd	|«      j                  «       «      }t        j                   d
|t        j"                  «       xr2 t        j                   d|t        j"                  «       xr
 | xr |dk  }|dk  s|rt        d|d d z  d¬«       |dz  }�Œt$        |	|	||d	|t&        d	t(        |rdj+                  d„ |D «       «      nd	dœ}t,        r/|j/                  |«       t        d|d d ›d|›d�d¬«       | dz  } �Œk|j/                  |«       | dz  } t        d|d d ›d|›d�d¬«       t1        j2                  d«       �Œ¯ t1        j2                  d«       t,        r�Œ|s�Œt4        j6                  j9                  dt:        j6                  j=                  t:        j6                  j?                  t@        «      «      «       ddl!m"}  ||tF        ¬«       g }�Œ” t,        rltI        t,        dd¬«      5 }|D ]+  }|jK                  tM        jN                  |d¬«      d z   «       Œ- 	 d d d «       t        d!t,        t        |«      fz  d¬«       nt|rrt4        j6                  j9                  dt:        j6                  j=                  t:        j6                  j?                  t@        «      «      «       ddl!m"}  ||tF        ¬«       t        d"| z  d¬«       t        d#|z  d¬«       t        d$t$        z  d¬«       y # t        $ r}t        d||fz  d¬«       Y d }~ �Œ=d }~ww xY w# 1 sw Y   ŒüxY w)%Nr   r	   zPage %d fetch error: %sTr#   zPage %d: empty, stopzPage %d: found %d itemsrQ   r   z<p[ >]z<a[ >]r¸   rÁ   z  skip empty/placeholder: %sé(   z; c              3   ó0   K  — | ]  \  }}|›d |›�–— Œ y­w)ú|N© )r©   Úur   s      r   r«   zmain.<locals>.<genexpr>–  s   è ø€ Ò(K¹d¸aÀ²A±qÔ)9Ñ(Kùs   ‚)Ú	site_nameÚ
source_urlr3   rD   Úpub_dateÚsummaryr“   ÚcategoryÚtagsÚ
group_namerb   z
  JSONL + z (ú)z  + g      Ð?g      à?)Úpush_to_searchdb)Úbatch_labelÚwr   )r,   FrÅ   r€   zJSONL written: %s (%d rows)u
   æ–°å¢ž: %du
   è·³è¿‡: %dz=== %s done ===)(r‘   r¿   r'   Ú_PAGESrÐ   rà   r.   r2   r\   r’   r:   rµ   r¥   r   r   r   r†   rz   Ú	SITE_NAMEÚCATEGORYÚ
GROUP_NAMEr‹   r   r[   r0   r1   ÚsysrU   ÚinsertrT   ÚdirnameÚabspathÚ__file__Úcrawler_librï   ÚSCRIPT_NAMEÚopenÚwriterÊ   rË   )Ú	new_countÚ
skip_countÚ	seen_urlsÚ
jsonl_rowsÚbatchrÎ   r¯   ry   r9   r`   rD   r°   ÚdhtmlÚdtitleÚddater±   r“   rœ   ÚattsÚ	plain_lenÚno_paraÚitemrï   ÚfÚrows                            r   Úmainr  k  s«  € Ø€IØ€JÜ“€IØ€JØ€EÜ„NÜ�aœ !™Ó$ó 4ˆð	Ü" 4Ó(ˆIÜ˜yÓ)ˆEñ ÜÐ(¨4Ñ/°tÕ<ÚÜÐ'¨4´°U³Ð*<Ñ<ÀDÕIØ$)ó #	Ñ ˆG�U˜DØ˜)Ñ#ØØ�M‰M˜'Ô"Ü˜'“NˆEÙØ˜a‘�
ØÜ*6°u¸gÓ*FÑ'ˆF�E˜<ÙØ�ÙØ�Ü'3°LÀ'Ó'JÑ$ˆG�Y ÜœBŸF™F :¨r°7Ó;×AÑAÓCÓDˆIÜŸ)™) I¨w¼¿¹Ó=Ð=ò  OÄbÇiÁiÐPYÐ[bÔdf×dhÑdhÓFiÐBiò  OÐr{Ðn{ò  Oð  AJð  MOñ  AOˆGØ˜2Š~¡ÜÐ4°v¸c¸r°{ÑBÈ$ÕOØ˜a‘�
Ùä&°gÀgØ¨U¸rØ"´À"Ü(ÙOS˜tŸy™yÑ(KÀdÔ(KÔKÐY[ñˆDõ Ø×!Ñ! $Ô'Ý¨V°C°Rª[º%Ð@ÈÕMØ˜Q‘�	ÙØ�L‰L˜ÔØ˜‰NˆIÝ 6¨#¨2¢;²Ð6¸dÕCÜ�J‰J�tÖðG#	ôH 	�
‰
�3Œß›eÜ�H‰H�O‰O˜AœrŸw™wŸ™¬r¯w©w¯©¼xÓ/HÓIÔJÝ4Ù˜U´Õ<ØŠEði4õl Ü”*˜c¨GÔ4ð 	D¸Ø!ò D�Ø—‘œŸ
™
 3°UÔ;¸dÑBÕCñD÷	Dô 	Ð+¬z¼3¸z»?Ð.KÑKÐSWÖXáÜ�H‰H�O‰O˜AœrŸw™wŸ™¬r¯w©w¯©¼xÓ/HÓIÔJÝ4Ù˜U´Õ<ä	ˆ,˜Ñ
"¨$Õ/Ü	ˆ,˜Ñ
#¨4Õ0Ü	Ð
œiÑ
'¨tÖ4øô ò 	ÜÐ+¨t°Q¨iÑ7¸tÕDÞûð	ú÷f	Dð 	Dús#   µO Ë1P
Ï 	PÏ)PÐPÐ
PÚ__main__)Nr¸   )3Ú__doc__rö   rT   r   r0   Úhtmlr   Úurllib.parserX   Úsqlite3rÊ   r(   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrº   ró   rõ   rü   rô   Úbs4r   ÚImportErrorÚenvironr)   r   r   r+   r&   Ú
_MAX_PAGESr�   Úargvr¡   r?   rS   ÚintrW   Ú
ValueErrorrò   r   r:   r¥   rµ   r½   r»   r¿   rÐ   rà   r  Ú__name__rå   r   r   ú<module>r     so  ðñ÷ H× G× G× Gß Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà#€Ø'€	Ø€
Ø"€Ø€ðÝ!ð �*‰*�.‰.˜Ð$9Ó
:€Ø�Z‰Z�^‰^˜L¨"Ó-€
Ø€ð @ØOØ'ñ€ð €
Ù�c—h‘hÓò �D€A€qØ‡|�|�JÕð	Ù˜QŸW™W S¨!›_¨QÑ/Ó0‰Jðð " Q’‰¨A€òóò&f'òR%ð. €Ø
€òò:ò4#òLJ5ðZ ˆzÒÙ…Fð øðE ò Ø‚Mðûð$ ò 	Ùð	ús$   ÁD  ÃD-Ä D*Ä)D*Ä-D5Ä4D5