Ë
    9|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ddl	Z	ddl
Z
	 ddlmZ dZdZdZdZdZej&                  j)                  d	d
«      Zej&                  j)                  dd«      ZdZdZddddœZdZ eej8                  «      D ]k  \  ZZej?                  d«      r	  e ejC                  dd«      d   «      ZŒ4edk(  sŒ:edz    e#ej8                  «      k  sŒS	  e ej8                  edz      «      ZŒm edk\  rendZ$d„ Z%d#d„Z&d#d„Z'd$d„Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-d „ Z.d!„ Z/e0d"k(  r ejb                   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_jslygc_hpgs.py - æ±Ÿè‹�ç»¿æº�-çŽ¯è¯„å…¬ç¤º
http://www.jslygc.com/list_info.aspx?cid=74 (iframe: list_news_iframe.aspx?cid=74)
åˆ—è¡¨: ASP.NET WebForms, #news_list ul li > a[href=show.aspx?id=N] + æ—¥æœŸ
åˆ†é¡µ: POST __EVENTTARGET=AspNetPager1&__EVENTARGUMENT=N (éœ€æ�ºå¸¦æœ€æ–° VIEWSTATE + Cookie)
è¯¦æƒ…: show.aspx?id=N â†’ h1(å®Œæ•´æ ‡é¢˜) + #txt1(æ­£æ–‡HTML, ä¿�ç•™è¡¨æ ¼) + #fj(é™„ä»¶)
æ³¨æ„�: åˆ—è¡¨æ ‡é¢˜è¢«æˆªæ–­(æ— çœ�ç•¥å�·), å®Œæ•´æ ‡é¢˜å¿…é¡»ä»Žè¯¦æƒ…é¡µ h1 æ��å�–
é    N)ÚBeautifulSoupzhttp://www.jslygc.comz2http://www.jslygc.com/list_news_iframe.aspx?cid=74u   æ±Ÿè‹�ç»¿æº�-çŽ¯è¯„å…¬ç¤ºu   æ±Ÿè‹�zcrawl_jslygc_hpgs.pyÚDB_PATHz/root/search.dbÚ
JSONL_PATHÚ úutf-8é9   zkMozilla/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| «      } | j                  «       S )Nr   u   â€‹u   â€Œu   â€�u   ï»¿ú\s+ú )Úhtml_libÚunescapeÚreplaceÚreÚsubÚstrip)Úts    ú&/root/gov_crawler/crawl_jslygc_hpgs.pyÚclean_titler   :   so   € ÙØÜ×Ñ˜!Ó€AØ	�	‰	�(˜BÓ×'Ñ'¨°"Ó5×=Ñ=¸hÈÓK×SÑSÐT\Ð^`Óa€AÜ
�‰ˆv�s˜AÓ€AØ�7‰7‹9Ðó    c                 óÒ   — t        |«      D ]J  }	 | j                  |t        |¬«      }|j                  dk(  r|c S 	 t        j                  d|dz  z   «       ŒL y# t        $ r Y Œ)w xY w)u&   GET with retry (ç«™ç‚¹é—´æ­‡æ€§è¶…æ—¶))ÚheadersÚtimeoutéÈ   é   N)ÚrangeÚgetÚHEADERSÚstatus_codeÚ	ExceptionÚtimeÚsleep)ÚsessionÚurlÚretriesr   ÚiÚrs         r   Úhttp_getr*   C   ss   € ä�7‹^ò ˆð	Ø—‘˜C¬¸'�ÓBˆAØ�}‰} Ò#Ø’ð $ô 	�
‰
�1�q˜1‘u‘9Õðð øô ò 	Ùð	ús   �(AÁ	A&Á%A&c                 óÔ   — t        |«      D ]K  }	 | j                  ||t        |¬«      }|j                  dk(  r|c S 	 t        j                  d|dz  z   «       ŒM y # t        $ r Y Œ)w xY w)N)Údatar   r   r   r   )r   Úpostr    r!   r"   r#   r$   )r%   r&   r,   r'   r   r(   r)   s          r   Ú	http_postr.   P   su   € Ü�7‹^ò ˆð	Ø—‘˜S t´WÀg�ÓNˆAØ�}‰} Ò#Ø’ð $ô 	�
‰
�1�q˜1‘u‘9Õðð øô ò 	Ùð	ús   �)AÁ	A'Á&A'c                 ó˜  — |dk(  rt        | t        «      }|€&y||dt        |«      dœ}t        | t        |¬«      }|€yt        dk(  r!|j
                  j                  t        d¬«      n|j                  }t        j                  d	|«      }t        j                  d
|«      }||r|j                  d«      n||r|j                  d«      fS |fS )u;   èŽ·å�–åˆ—è¡¨é¡µ. page=1 GET; page>1 POST AspNetPager å›žå�‘r
   )Nr   r   ÚAspNetPager1)Ú__VIEWSTATEÚ__VIEWSTATEGENERATORÚ__EVENTTARGETÚ__EVENTARGUMENT)r,   r   r   ©Úerrorsz id="__VIEWSTATE" value="([^"]*)"z)id="__VIEWSTATEGENERATOR" value="([^"]*)")r*   ÚLIST_URLÚstrr.   ÚENCÚcontentÚdecodeÚtextr   ÚsearchÚgroup)	r%   ÚpageÚlast_vsÚlast_vgr)   r,   r<   ÚvsÚvgs	            r   Ú
fetch_listrD   \   sÀ   € àˆq‚yÜ�WœhÓ'ˆØˆ9Øð #Ø$+Ø+Ü" 4›yñ	
ˆô �gœx¨dÔ3ˆØˆ9ØÜ69¸W²nˆ1�9‰9×ÑœC¨	ÐÔ2È!Ï&É&€DÜ	�‰Ð6¸Ó	=€BÜ	�‰Ð?ÀÓ	F€BØ¡�"—(‘(˜1”+¨Á2°B·H±H¸Q³KÐSÐSÈ7ÐSÐSr   c                 óX  — g }t        j                  d| t         j                  t         j                  z  «      D ]n  }|j	                  d«      }t        |j	                  d«      «      }|j	                  d«      }|rt        |«      dk  rŒPt        › d|› �}|j                  |||f«       Œp |S )u@   #news_list ul li: <a href="show.aspx?id=N">æ ‡é¢˜</a> 2025-07-09zP<a[^>]*href="show\.aspx\?id=(\d+)"[^>]*>(.*?)</a>\s*([0-9]{4}-[0-9]{2}-[0-9]{2})r
   r   é   é   z/show.aspx?id=)	r   ÚfinditerÚSÚIr>   r   ÚlenÚBASE_URLÚappend)Ú	html_textÚitemsÚmÚnidÚtitleÚdateÚabs_urls          r   Ú
parse_listrU   r   s±   € à€EÜ�[‰[ÐlÐnwÔy{×y}Ñy}ô  AC÷  AEñ  AEñ  zEó  Fò -ˆØ�g‰g�a‹jˆÜ˜AŸG™G A›JÓ'ˆØ�w‰w�q‹zˆÙœ˜E›
 QšØÜ�J˜n¨S¨EÐ2ˆØ�‰�g˜u dÐ+Õ,ð-ð €Lr   c                 óÔ  — d}d}d}g }t         �rOt        | d«      }|j                  d«      }|rt        |j                  dd¬«      «      }|j                  dd¬	«      }|r"dj	                  d
„ |j
                  D «       «      }|j                  dd¬	«      }	|	rŸ|	j                  dd¬«      D ]‰  }
|
d   }t        |
j                  dd¬«      «      xs1 t        j                  j                  |j                  d«      d   «      }t        j                  j                  ||«      }|j                  ||f«       Œ‹ |rÛ|j                  dd¬«      D ]Å  }
|
d   }t        j                   d|t        j"                  «      sŒ.t        |
j                  dd¬«      «      xs1 t        j                  j                  |j                  d«      d   «      }t        j                  j                  ||«      }||D �cg c]  }|d   ‘Œ	 c}vsŒ³|j                  ||f«       ŒÇ |sJ|j                  d«      }|r7t        j                   d|j                  «       «      }|r|j%                  d«      }||||fS c c}w )u5   h1 å®Œæ•´æ ‡é¢˜ + #txt1 æ­£æ–‡HTML + #fj é™„ä»¶åˆ—è¡¨r   úhtml.parserÚh1r   T©r   ÚdivÚtxt1)Úidc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)r8   )Ú.0Úcs     r   ú	<genexpr>zparse_detail.<locals>.<genexpr>Ž   s   è ø€ Ò"A¨a¤3 q§6Ñ"Aùs   ‚ÚfjÚa©Úhrefrd   ú?r   ú\.(pdf|docx?|xlsx?|zip|rar|txt)Úh2u"   æ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r
   )r   Úfindr   Úget_textÚjoinÚcontentsÚfind_allÚosÚpathÚbasenameÚsplitÚurllibÚparseÚurljoinrM   r   r=   rJ   r>   )rN   Úpage_urlrR   rS   Úcontent_htmlÚattachmentsÚsouprX   r[   ra   rb   rd   ÚtxtrT   Úxrg   Údms                    r   Úparse_detailr{   €   s&  € à€EØ€DØ€LØ€KÞÜ˜Y¨Ó6ˆØ�Y‰Y�t‹_ˆÙÜ §¡¨C°t Ó <Ó=ˆEà�y‰y˜ 6ˆyÓ*ˆÙØŸ7™7Ñ"A°4·=±=Ô"AÓAˆLà�Y‰Y�u ˆYÓ&ˆÙØ—[‘[ ¨4�[Ó0ò 3�Ø˜‘y�Ü! !§*¡*¨S¸ *Ó"=Ó>ÒfÄ"Ç'Á'×BRÑBRÐSW×S]ÑS]Ð^aÓSbÐcdÑSeÓBf�Ü Ÿ,™,×.Ñ.¨x¸Ó>�Ø×"Ñ" G¨S >Õ2ð	3ñ Ø—]‘] 3¨T�]Ó2ò ;�Ø˜‘y�Ü—9‘9Ð?ÀÄrÇtÁtÕLÜ% a§j¡j°¸D jÓ&AÓBÒjÄbÇgÁg×FVÑFVÐW[×WaÑWaÐbeÓWfÐghÑWiÓFj�CÜ$Ÿl™l×2Ñ2°8¸TÓB�GØ°[Ö&A° q¨£tÒ&AÒAØ#×*Ñ*¨G°S¨>Õ:ð;ñ Ø—‘˜4“ˆBÙÜ—Y‘YÐDÀbÇkÁkÃmÓT�ÙØŸ8™8 A›;�DØ�$˜ kÐ1Ð1ùò 'Bs   Ç-I%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        �r	 t	        | d«      }|j                  d	d
¬«      D ]á  }t        j                  d|j                  dd«      t         j                  «      sŒ9|d   }|j                  d
¬«      xs1 t        j                  j                  |j                  d«      d   «      }t        j                  j                  ||«      }|j!                  ||f«       dt#        |«      › d�}	d|› d|› d�||	<   |j%                  |	«       Œã |j                  d«      D ]ò  }
|
j                  d«      }|sŒ|
j                  d
¬«      rŒ*g }|D ]…  }|j                  d«      xs d}|sŒt        j                  j                  ||«      }|j!                  d|› dt        j                  j                  |j                  d«      d   «      xs d› d�«       Œ‡ |sŒ¹dt#        |«      › d�}	ddj'                  |«      z   dz   ||	<   |
j%                  |	«       Œô t)        |«      } g Šˆfd„}t        j                  d || t         j                  t         j                  z  ¬«      } t        j                  d!| t         j                  «      rd"nd}t        rQ	 t	        | d«      }|j                  d
«      D ]%  }d#D ]  }|j,                  j/                  |d$«       Œ  Œ' t)        |«      } t        j                  dd%| t         j                  ¬«      } t        j                  d&d'| t         j                  ¬«      } t        j                  d(d| t         j                  ¬«      } g }| j                  d)«      D ]ï  }|j1                  «       }|sŒt        j                  d*d|«      }t3        j4                  |«      }|j7                  d+d,«      j7                  d-d,«      }t        j                  d.d|«      }|sŒ~|j9                  «       D ]  \  }}|j7                  ||«      }Œ t;        ‰«      D ]  \  }}|j7                  d/|› d�|«      }Œ |j!                  |j1                  «       «       Œñ d)j'                  |«      }|j9                  «       D ]  \  }}|j7                  ||«      }Œ t;        ‰«      D ]  \  }}|j7                  d/|› d�|«      }Œ t        j                  d0d|«      }t        j                  d1d|«      }t        j                  d2d|«      }t        j                  d3d|«      }t3        j4                  |«      }t        j                  d4d'|«      }t        j                  d5d)|«      }t        j                  d6d,|«      }t=        «       }g }|j                  d)«      D ]X  }
t        j                  d7dt        j                  d*d|
«      «      }	|	sŒ2|	|v rŒ7|j?                  |	«       |j!                  |
«       ŒZ d)j'                  |«      j1                  «       }|||fS # t*        $ r Y �Œûw xY w# t*        $ r Y �ŒLw xY w)8uA   æ¸…ç�†æ­£æ–‡, ä¿�ç•™è¡¨æ ¼ HTML, é™„ä»¶é“¾æŽ¥è½¬ç»�å¯¹ URL æ®µè�½r   r   z
<!--.*?-->)Úflagsz<meta[^>]*>z<script[^>]*>.*?</script>z<style[^>]*>.*?</style>rW   rb   Trc   rf   rd   rY   re   Ú
__ATTACH__Ú__ú<p><a href="ú" target="_blank">ú</a></p>ÚpÚimgÚsrcz	<a href="u   å›¾ç‰‡z</a>Ú__IMG__z<p>z<br/>z</p>c                 óh   •— ‰j                  | j                  d«      «       dt        ‰«      dz
  › d�S )Nr   Ú__TBL__r
   r   )rM   r>   rK   )rP   Útable_protects    €r   Ú	_tbl_replzhtml_to_text.<locals>._tbl_replÔ   s3   ø€ Ø×Ñ˜QŸW™W Q›ZÔ(Øœ˜]Ó+¨AÑ-Ð.¨bÐ1Ð1r   z<table[^>]*>.*?</table>z<table[^>]*>r
   )ÚstyleÚclassÚlangÚdirÚalignÚvalignÚwidthÚheightÚborderÚcellpaddingÚcellspacingNz</p>

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

ú<[^>]+>õ   Â r   z&nbsp;z[\s\u200b\u200c\u200d\ufeff]+rˆ   z__LINK__\d+__z__TBL__\d+__z__IMG__\d+__z__ATTACH__\d+__z[ \t]+\nz\n{3,}z	[ \t]{2,}r   ) r   r   rI   rJ   r   rl   r=   r   ri   rm   rn   ro   rp   rq   rr   rs   rM   rK   Úreplace_withrj   r8   r"   ÚattrsÚpopr   r   r   r   rO   Ú	enumerateÚsetÚadd)r:   rt   rv   Úlink_protectÚ_souprb   rd   rx   rT   Úkeyrƒ   ÚimgsÚsrcsr„   r…   rŠ   Ú	has_tableÚtagÚattrÚpartsÚblockÚbÚplainÚkÚvr(   ÚtblÚoutÚseenÚfinalr‰   s                                 @r   Úhtml_to_textr²   ª   s5  ø€ áØ�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æð	Ü! '¨=Ó9ˆEØ—^‘^ C¨d�^Ó3ò (�Ü—9‘9Ð?ÀÇÁÀvÈrÓARÔTV×TXÑTXÕYØ˜V™9�DØŸ*™*¨4˜*Ó0ÒX´B·G±G×4DÑ4DÀTÇZÁZÐPSÃ_ÐUVÑEWÓ4X�CÜ$Ÿl™l×2Ñ2°8¸TÓB�GØ×&Ñ&¨° ~Ô6Ø&¤s¨<Ó'8Ð&9¸Ð<�CØ*6°w°iÐ?QÐRUÐQVÐV^Ð(_�L Ñ%Ø—N‘N 3Õ'ð(ð —^‘^ CÓ(ò ,�Ø—z‘z %Ó(�Ú §
¡
° 
Õ 6Ø�DØ#ò F˜Ø!Ÿg™g e›nÒ2°˜ÚÜ&,§l¡l×&:Ñ&:¸8ÀSÓ&I˜GØ ŸK™K¨)°G°9Ð<NÌrÏwÉw×O_ÑO_Ð`c×`iÑ`iÐjmÓ`nÐopÑ`qÓOrÒO~Ðv~ÐNð  @Dð  )Eõ  Fð	Fò
 Ø '¬¨LÓ(9Ð':¸"Ð=˜Ø,1°G·L±LÀÓ4FÑ,FÈÑ,O˜ SÑ)ØŸ™ sÕ+ð,ô ˜%“jˆGð €Mô2ô �f‰fÐ/°¸GÌ2Ï4É4ÔRT×RVÑRVÉ;ÔW€GÜ—Y‘Y˜°¼¿¹Ô>‘ÀA€Iåð	Ü! '¨=Ó9ˆEØ—~‘~ dÓ+ò .�ð Lò .�DØ—I‘I—M‘M $¨Õ-ñ.ð.ô ˜%“jˆGô �f‰f�W˜j¨'¼¿¹Ô>€GÜ�f‰f�\ 4¨¼¿¹Ô=€GÜ�f‰fÐ@À"ÀgÔUW×UYÑUYÔZ€Gà€EØ—‘˜vÓ&ò  ˆØ�K‰K‹MˆÙØÜ—‘�z 2 qÓ)ˆÜ×!Ñ! %Ó(ˆØ—‘˜f cÓ*×2Ñ2°8¸SÓAˆÜ—‘Ð7¸¸UÓCˆÙØØ ×&Ñ&Ó(ò 	 ‰DˆAˆqØ—	‘	˜!˜Q“‰Að	 ä Ó.ò 	0‰FˆAˆsØ—	‘	˜G A 3 b˜/¨3Ó/‰Að	0à�‰�Q—W‘W“YÕð ð  �+‰+�eÓ
€CØ×"Ñ"Ó$ò  ‰ˆˆ1Ø�k‰k˜!˜QÓ‰ð ä˜MÓ*ò 0‰ˆˆ3Ø�k‰k˜G A 3 b˜/¨3Ó/‰ð0ô �&‰&Ð! 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 ò 	Úð	ûô" ò 	Úð	úsG   ÃA[ Ä+C[ Ç>[ È[ È0A/[ Ê A[ ÍA[& Û	[#Û"[#Û&	[3Û2[3c                 óš   — |s| S | j                  «       r| gng }|D ]  \  }}|j                  d|› d|› d�«       Œ dj                  |«      S )uC   é™„ä»¶åŒºè½¬ <p><a>ç»�å¯¹URL</a></p> æ®µè�½, ä¸�ä¿�ç•™ ul/li åŒ…è£…r€   r�   r‚   r—   )r   rM   rj   )r:   rv   r¨   rT   rx   s        r   Úappend_attachmentsr´     s[   € áØˆØ Ÿ™œˆW‰I¨b€EØ#ò N‰ˆ�Ø�‰�| G 9Ð,>¸s¸eÀ8ÐLÕMðNà�;‰;�uÓÐr   c                 ó°   — 	 | j                  dt        f«      }|j                  «       D �ch c]  }|d   ’Œ	 c}S c c}w # t        $ r t	        «       cY S w xY w)u7   åŠ è½½å·²å…¥åº“ page_url é›†å�ˆç”¨äºŽåˆ—è¡¨çº§é¢„æŸ¥é‡�z.SELECT page_url FROM gov_raw WHERE site_name=?r   )ÚexecuteÚ	SITE_NAMEÚfetchallr"   rž   )ÚconnÚcurÚrows      r   Úload_existing_urlsr¼   "  sN   € ðØ�l‰lÐKÌiÈ\ÓZˆØ"%§,¡,£.Ö1˜3��A“Ò1Ð1ùÒ1øÜò Ü‹uŠðús   ‚)? «:·? º? ¿AÁAc                 óž  — | j                  d|t        f«      }|j                  «       ry	 d}	 ddlm}  ||«      }| j                  d|||||t        t        t        ||f
«      }|j                  dkD  ryt        j                  dd|«      }	t        j                  |	«      }	t        j                  d	d
|	«      j                  «       d d }	| j                  d|j                  |t        |	f«       yy# t
        $ r Y Œ¼w xY w# t        j                   $ r=}
dt#        |
«      v r*t%        j&                  d«       t)        | |||||«      cY d }
~
S ‚ d }
~
ww xY w)Nz7SELECT id FROM gov_raw WHERE page_url=? AND site_name=?FÚotherr   )Úclassify_industryz¨INSERT OR IGNORE INTO gov_raw (page_url, source_url, title, content, publish_date, site_name, group_name, script_name, has_table, industry) VALUES (?,?,?,?,?,?,?,?,?,?)r˜   r   r   r   r   zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)TÚlockedrF   )r¶   r·   ÚfetchoneÚcrawler_libr¿   r"   Ú
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr   r   r   r   r   Ú	lastrowidÚsqlite3ÚOperationalErrorr8   r#   r$   Ústore_record)r¹   r&   rR   r:   rS   r¥   rº   Úindustryr¿   ÚsummaryÚes              r   rÉ   rÉ   +  sF  € Ø
�,‰,ÐPÐSVÔXaÐRbÓ
c€CØ
‡|�|„~ØðØˆð	Ý5Ù(¨Ó/ˆHð �l‰lð+ð �#�u˜g t¬Y¼
ÄKÐQZÐ\dÐeó	
ˆð �<‰<˜!ÒÜ—f‘f˜Z¨¨WÓ5ˆGÜ×'Ñ'¨Ó0ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:¸4¸CÐ@ˆGØ�L‰LØfØ—‘ ¤y°'Ð:ôð Øøô# ò 	Ùð	ûô$ ×#Ñ#ò Ø”s˜1“vÑÜ�J‰J�qŒMÜ  c¨5°'¸4ÀÓKÕKØûð	úsF   «C< ®C- ¼B/C< Ã-	C9Ã6C< Ã8C9Ã9C< Ã<EÄ1EÅ EÅEÅEc                  óÒ  — dd l } | j                  «       }|j                  j                  t        «       d }t
        sbt        j                  t        d¬«      }|j                  d«       |j                  d«       t        |«      }t        dt        |«      › d�d¬	«       d}d}g }d
}d}t        dt        dz   «      D �]  }		 t        ||	||«      \  }
}}|
€t        d|	› d�d¬	«        �næ	 t#        |
«      }t        d|	› dt        |«      › d�d¬	«       |st        dd¬	«        �n«|D �]�  \  }}}t
        s
|v r|dz  }Œ	 t%        ||«      }|€t        d|› �d¬	«       |dz  }Œ=|j&                  j)                  t*        d¬«      }t-        ||«      \  }}}}|s|}|s|}t/        ||«      \  }}}|r||z   n|}t1        ||«      }t        t3        j4                  dd
|«      j7                  «       «      }|dk  r|st        d|d d › �d¬	«       |dz  }Œêt
        rD|j9                  |||||t:        t<        t>        dœ«       t        d|d d › d|› d �d¬	«       |dz  }�Œ4tA        ||||||«      }|r.|dz  }jC                  |«       t        d!|d d › d|› d �d¬	«       n|dz  }tE        jF                  d"«       �Œ� tE        jF                  d#«       �Œ t
        rmtI        t
        d$d%¬&«      5 }|D ]+  }|jK                  tM        jN                  |d'¬(«      d)z   «       Œ- 	 d d d «       t        d*t
        › dt        |«      › d+�d¬	«       |� |jQ                  «        |jS                  «        t        d,|› d-|› �d¬	«       |dkD  s|dkD  rdS dS # t         $ r}t        d|	› d|› �d¬	«       Y d }~ ŒØd }~ww xY w# t         $ r#}t        d|› d|› �d¬	«       |dz  }Y d }~�Œ°d }~ww xY w# 1 sw Y   ŒÆxY w).Nr   é<   )r   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALu
   å·²å…¥åº“ u    æ�¡, ç”¨äºŽåˆ—è¡¨çº§é¢„æŸ¥é‡�T)Úflushr   Ú0C85029Dr
   zPage z fetch error (all retries)z fetch error: z: found z itemszEmpty page, stop paginationz  detail error (all retries): r   r5   z  detail error z: r˜   é
   z  skip empty: é   )rt   rR   r:   Úpublish_dater¥   Ú	site_nameÚ
group_nameÚscript_namez
  JSONL + é(   z (ú)z  + g333333Ó?g      à?Úwr   )ÚencodingF)Úensure_asciir–   zJSONL written: z rows)z
DONE: new=z skip=)*ÚrequestsÚSessionr   Úupdater    r   rÇ   Úconnectr   r¶   r¼   ÚprintrK   r   Ú_PAGESrD   r"   rU   r*   r:   r;   r9   r{   r²   r´   r   r   r   rM   r·   rÃ   rÄ   rÉ   rŸ   r#   r$   ÚopenÚwriteÚjsonÚdumpsÚcommitÚclose)rÜ   Úsr¹   ÚexistingÚ	new_countÚ
skip_countÚ
jsonl_rowsr@   rA   r?   rN   rÌ   rO   rT   rR   rS   Údhtml_rÚdhtmlÚdtitleÚddateru   Úattsr:   r¥   Úatts_inÚall_attsÚ	plain_lenÚokÚfr»   s                                 r   Úmainr÷   M  s%  € ÛØ×ÑÓ€AØ‡I�I×Ñ”WÔØ€DÝÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/Ü% dÓ+ˆÜ�
œ3˜x›=˜/Ð)GÐHÐPTÕUà€IØ€JØ€JØ€GØ€Gä�aœ !™Ó$ó <ˆð	Ü*4°Q¸¸gÀwÓ*OÑ'ˆI�w ØÐ Ü˜˜d˜VÐ#=Ð>ÀdÕKÚð !ô ˜9Ó%ˆÜ��d�V˜8¤C¨£J <¨vÐ6¸dÕCÙÜÐ/°tÕ<ÚØ$)ó -	Ñ ˆG�U˜DÝ '¨XÑ"5Ø˜a‘�
Øð
Ü" 1 gÓ.�Ø�?ÜÐ:¸7¸)ÐDÈDÕQØ !‘O�JØØŸ™×.Ñ.¬s¸9Ð.ÓE�ô
 1=¸UÀGÓ0LÑ-ˆF�E˜<¨ÙØ�ÙØ�Ü*6°|ÀWÓ*MÑ'ˆG�Y Ù)0�t˜g’~°dˆHÜ(¨°(Ó;ˆGÜœBŸF™F :¨r°7Ó;×AÑAÓCÓDˆIØ˜2Š~¡lÜ˜ v¨c¨r { mÐ4¸DÕAØ˜a‘�
ØÝØ×!Ñ!Ø '°&ÀWØ$)¸	Ü!*¼*Ü#.ñ	#ô ô ˜
 6¨#¨2 ; -¨r°%°¸Ð:À$ÕGØ˜Q‘�	ÙÜ˜d G¨V°W¸eÀYÓOˆBÙØ˜Q‘�	Ø—‘˜WÔ%Ü˜˜V C R˜[˜M¨¨E¨7°!Ð4¸DÖAà˜a‘�
Ü�J‰J�sŽOð[-	ô\ 	�
‰
�3Žðy<õ| Ü”*˜c¨GÔ4ð 	D¸Ø!ò D�Ø—‘œŸ
™
 3°UÔ;¸dÑBÕCñD÷	Dô 	�¤
˜|¨2¬c°*«oÐ->¸fÐEÈTÕRàÐØ�‰ŒØ�
‰
Œä	ˆJ�y�k ¨
 |Ð
4¸DÕAØ˜A’ ¨a¢ˆ1Ð6°QÐ6øôG ò 	Ü�E˜$˜˜~¨a¨SÐ1¸Õ>Ýûð	ûô& ò Ü˜¨ y°°1°#Ð6¸dÕCØ˜a‘�
Ýûðú÷L	Dð 	DúsB   Ã %NÄ>#N.Å"!N.Ë&1OÎ	N+ÎN&Î&N+Î.	OÎ7OÏOÏO&Ú__main__)rF   rÒ   )r   rÐ   )2Ú__doc__Úsysrm   r   r#   Úhtmlr   Úurllib.parserq   rÇ   rä   Úbs4r   ÚImportErrorrL   r7   r·   rÃ   rÄ   Úenvironr   r   r   r9   ÚTOTAL_PAGESr    Ú
_MAX_PAGESr�   Úargvr(   rb   Ú
startswithÚintrp   Ú
ValueErrorrK   rá   r   r*   r.   rD   rU   r{   r²   r´   r¼   rÉ   r÷   Ú__name__Úexit© r   r   ú<module>r	     sº  ðñó Û 	Û 	Û Û Û Û Û ðÝ!ð
 #€Ø?€Ø'€	Ø€
Ø$€Ø
�*‰*�.‰.˜Ð$5Ó
6€Ø�Z‰Z�^‰^˜L¨"Ó-€
Ø€Ø€ð @Ø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€òó
ó	óTò,ò'2òTk'ò\òòòD[7ð| ˆzÒØ€C‡H�H‰T‹VÕð øðk ò ØƒMðûð2 ò 	Ùð	ûð
 ò 	Ùð	ús5   ¤E Â"EÃEÅEÅEÅEÅEÅE$Å#E$