Ë
    |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d	Zej(                  j+                  d
d«      Zej(                  j+                  dd«      ZdZdZdddddœZdZ eej:                  «      D ]k  \  ZZejA                  d«      r	  e!ejE                  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&d„Z(d„ Z)d„ Z*d„ Z+d„ Z,d „ Z-d!„ Z.d"„ Z/d#„ Z0d$„ Z1e2d%k(  r ejf                   e1«       «       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_jiaxian_tzgg.py - éƒ�åŽ¿-å…¬å‘Šå…¬ç¤º (SiteServer CMS + stlDynamic)
http://www.jiaxian.gov.cn/channels/12396.html
åˆ—è¡¨: POST https://user.pds.gov.cn/api/Outer/T?parms=opt/dynamic/ (JSON body)
  å�‚æ•°: publishmentsystemid=6134, channelid=12396, template=åŠ å¯†token(ä»Žåˆ—è¡¨é¡µæ��å�–), pageNum=N
  è¿”å›ž: li.right_list_li > a[href=/contents/12396/NNNN.html][title=å®Œæ•´æ ‡é¢˜] + span.date
åˆ†é¡µ: pageNum=1..2 (2é¡µå…±17æ�¡, æ¯�é¡µ10æ�¡)
è¯¦æƒ…: /contents/12396/NNNN.html â†’ .conternn1(æ ‡é¢˜) + .conternn2(æ—¥æœŸ) + #con(æ­£æ–‡HTML)
é    N)ÚBeautifulSoupzhttp://www.jiaxian.gov.cnz-http://www.jiaxian.gov.cn/channels/12396.htmlz6https://user.pds.gov.cn/api/Outer/T?parms=opt/dynamic/u   éƒ�åŽ¿-å…¬å‘Šå…¬ç¤ºu   æ²³å�—zcrawl_jiaxian_tzgg.pyÚDB_PATHz/root/search.dbÚ
JSONL_PATHÚ úutf-8é   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.9zapplication/json)z
User-AgentÚAcceptzAccept-LanguagezContent-Typeé   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_jiaxian_tzgg.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)N)ÚheadersÚtimeoutéÈ   r   )ÚrangeÚgetÚHEADERSÚstatus_codeÚ	ExceptionÚtimeÚsleep)ÚsessionÚurlÚretriesr   ÚiÚrs         r   Úhttp_getr)   F   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)Újsonr   r   r   r   )r   Úpostr   r    r!   r"   r#   )r$   r%   Úbodyr&   r   r'   r(   s          r   Úhttp_post_jsonr.   R   su   € Ü�7‹^ò ˆð	Ø—‘˜S t´WÀg�ÓNˆAØ�}‰} Ò#Ø’ð $ô 	�
‰
�1�q˜1‘u‘9Õðð øô ò 	Ùð	ús   �)AÁ	A'Á&A'c                 óÞ   — t        | t        «      }|€y|j                  j                  t        d¬«      }t        j                  d|«      }|sy|j                  d«      j                  dd«      S )u<   ä»Žåˆ—è¡¨é¡µæ��å�– stlDynamic template token (0slash0 â†’ /)Nr   ©Úerrorsztemplate:\s*[\'"](\S+?)[\'"]r
   Ú0slash0ú/)	r)   ÚLIST_URLÚcontentÚdecodeÚENCr   ÚsearchÚgroupr   )r$   r(   ÚtextÚms       r   Úget_templater<   ^   sa   € ä�œ(Ó#€AØ€yØØ�9‰9×ÑœC¨	ÐÓ2€DÜ
�	‰	Ð1°4Ó8€AÙØØ�7‰7�1‹:×Ñ˜i¨Ó-Ð-r   c                 óT   — dddd||dœ}t        | t        |«      }|€y |j                  S )Niö  il0  r   ÚajaxElement_1_1)ÚpublishmentsystemidÚ	channelidÚ	contentidÚ	ajaxdividÚtemplateÚpageNum)r.   ÚAPI_URLr:   )r$   ÚpagerC   r-   r(   s        r   Ú
fetch_listrG   j   s<   € à#ØØØ&ØØñ€Dô 	�w¤¨Ó.€AØ€yØØ�6‰6€Mr   c                 óÚ  — g }t         rât        | d«      }|j                  d«      D ]Â  }|j                  dd¬«      }|sŒ|d   }|j                  d«      xs |j	                  d¬«      }t        |«      }d	}|j                  d
d¬«      }|r|j	                  d¬«      }|rt        |«      dk  rŒˆt        j                  j                  t        dz   |«      }	|j                  |	||f«       ŒÄ |S )uT   li.right_list_li > a[href=/contents/12396/NNNN.html][title=å®Œæ•´æ ‡é¢˜] + span.dateúhtml.parserzli.right_list_liÚaT©ÚhrefrL   Útitle©r   r   ÚspanÚdate)Úclass_é   r3   )r   ÚselectÚfindr   Úget_textr   ÚlenÚurllibÚparseÚurljoinÚBASE_URLÚappend)
Ú	html_textÚitemsÚsoupÚlirJ   rL   rM   rP   ÚspÚabs_urls
             r   Ú
parse_listrb   y   så   € à€EÝÜ˜Y¨Ó6ˆØ—+‘+Ð0Ó1ò 	1ˆBØ—‘˜ $�Ó'ˆAÙØØ�V‘9ˆDØ—E‘E˜'“NÒ< a§j¡j°t jÓ&<ˆEÜ Ó&ˆEØˆDØ—‘˜¨�Ó/ˆBÙØ—{‘{¨�{Ó.�ÙœC ›J¨šNØÜ—l‘l×*Ñ*¬8°c©>¸4Ó@ˆGØ�L‰L˜' 5¨$Ð/Õ0ð	1ð €Lr   c                 óh  — d}d}d}g }t         �r™t        | d«      }|j                  d«      }|rt        |j                  dd¬«      «      }|j                  d«      }|r7t	        j
                  d|j                  «       «      }	|	r|	j                  d	«      }|j                  d
«      }
|
r"dj                  d„ |
j                  D «       «      }|j                  dd¬«      D ]É  }|d   }d|v s&t	        j
                  d|t        j                  «      sŒ2t        |j                  dd¬«      «      xs1 t        j                  j                  |j                  d«      d   «      }t        j                   j#                  ||«      }||D �cg c]  }|d   ‘Œ	 c}vsŒ·|j%                  ||f«       ŒË ||||fS c c}w )u7   .conternn1 æ ‡é¢˜ + .conternn2 æ—¥æœŸ + #con æ­£æ–‡HTMLr   rI   z
.conternn1r   TrN   z
.conternn2z(\d{4}-\d{2}-\d{2})r
   z#conc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)Ústr)Ú.0Úcs     r   ú	<genexpr>zparse_detail.<locals>.<genexpr>¢   s   è ø€ Ò"@¨a¤3 q§6Ñ"@ùs   ‚rJ   rK   rL   ú/upload/ú#\.(pdf|docx?|xlsx?|zip|rar|wps|ofd)ú?r   )r   Ú
select_oner   rU   r   r8   r9   ÚjoinÚcontentsÚfind_allÚIÚosÚpathÚbasenameÚsplitrW   rX   rY   r[   )r\   Úpage_urlrM   rP   Úcontent_htmlÚattachmentsr^   Út1Út2ÚdmÚconrJ   rL   Útxtra   Úxs                   r   Úparse_detailr~   �   s†  € à€EØ€DØ€LØ€KÞÜ˜Y¨Ó6ˆØ�_‰_˜\Ó*ˆÙÜ §¡¨C°t Ó <Ó=ˆEØ�_‰_˜\Ó*ˆÙÜ—‘Ð1°2·;±;³=ÓAˆBÙØ—x‘x “{�Ø�o‰o˜fÓ%ˆÙØŸ7™7Ñ"@°3·<±<Ô"@Ó@ˆLà—‘˜s¨�Ó.ò 	7ˆAØ�V‘9ˆDØ˜TÑ!¤R§Y¡YÐ/UÐW[Ô]_×]aÑ]aÕ%bÜ! !§*¡*¨S¸ *Ó"=Ó>ÒfÄ"Ç'Á'×BRÑBRÐSW×S]ÑS]Ð^aÓSbÐcdÑSeÓBf�Ü Ÿ,™,×.Ñ.¨x¸Ó>�Ø°Ö"=¨A 1 Q£4Ò"=Ò=Ø×&Ñ&¨° ~Õ6ð	7ð �$˜ kÐ1Ð1ùò #>s   ÆF/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 ]õ  }d|j                  dd«      v s6t        j                  d|j                  dd«      t         j                  «      sŒM|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                  d/d|«      }t        j                  d0d|«      }t        j                  d1d|«      }t        j                  d2d|«      }t3        j4                  |«      }t        j                  d3d&|«      }t        j                  d4d(|«      }t        j                  d5d+|«      }t=        «       }g }|j                  d(«      D ]X  }
t        j                  d6d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)7uA   æ¸…ç�†æ­£æ–‡, ä¿�ç•™è¡¨æ ¼ HTML, é™„ä»¶é“¾æŽ¥è½¬ç»�å¯¹ URL æ®µè�½r   r   z
<!--.*?-->)Úflagsz<meta[^>]*>z<script[^>]*>.*?</script>z<style[^>]*>.*?</style>rI   rJ   TrK   ri   rL   rj   rN   rk   Ú
__ATTACH__Ú__z	<a href="ú" target="_blank">z</a>ÚpÚimgÚsrcu   å›¾ç‰‡Ú__IMG__z<p>z<br/>z</p>c                 óh   •— ‰j                  | j                  d«      «       dt        ‰«      dz
  › d�S )Nr   Ú__TBL__r
   r‚   )r[   r9   rV   )r;   Ú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   ÚSrp   r   ro   r   r8   rU   rq   rr   rs   rt   rW   rX   rY   r[   rV   Úreplace_withrm   re   r!   ÚattrsÚpopr   r   r   r   r]   Ú	enumerateÚsetÚadd)r5   ru   rw   Úlink_protectÚ_souprJ   rL   r|   ra   Úkeyr„   ÚimgsÚsrcsr…   r†   r‹   Ú	has_tableÚtagÚattrÚpartsÚblockÚbÚplainÚkÚvr'   ÚtblÚoutÚseenÚfinalrŠ   s                                 @r   Úhtml_to_textr´   ®   sM  ø€ áØ�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ò (�Ø §¡ v¨rÓ!2Ñ2´b·i±iÐ@fÐhi×hmÑhmÐntÐvxÓhyÔ{}×{Ñ{õ  7AØ˜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Ø*3°G°9Ð<NÈsÈeÐSWÐ(X�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[* È[* È%[* ÉA/[* Ê4A[* Í*A[: Û*	[7Û6[7Û:	\Ü\c                 óÚ   — |s| S t        «       }| j                  «       r| gng }|D ]3  \  }}||v rŒ|j                  |«       |j                  d|› d|› d�«       Œ5 dj	                  |«      S )u;   é™„ä»¶åŒºè½¬ <p><a>ç»�å¯¹URL</a></p> æ®µè�½, æŒ‰ URL åŽ»é‡�z<p><a href="rƒ   z</a></p>r˜   )r    r   r¡   r[   rm   )r5   rw   r²   rª   ra   r|   s         r   Úappend_attachmentsr¶     sz   € áØˆÜ‹5€DØ Ÿ™œˆW‰I¨b€EØ#ò N‰ˆ�Ø�d‰?ØØ�‰�ÔØ�‰�| 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)Nz.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Úlockedé   )r¸   r¹   ÚfetchoneÚcrawler_librÁ   r!   Ú
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr   r   r   r   r   Ú	lastrowidÚsqlite3ÚOperationalErrorre   r"   r#   Ústore_record)r»   r%   rM   r5   rP   r§   r¼   ÚindustryrÁ   ÚsummaryÚes              r   rÌ   rÌ   2  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¬	«       t        |«      }|st        d
d¬	«       yt        dt        |«      › d�d¬	«       d}d}g }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|}t1        ||«      \  }}}|r||z   n|}t3        ||«      }t        t5        j6                  dd|«      j9                  «       «      }|dk  r|st        d|d d › �d¬	«       |dz  }Œêt
        rD|j;                  |||||t<        t>        t@        dœ«       t        d|d d  › d!|› d"�d¬	«       |dz  }�Œ4tC        ||||||«      }|r.|dz  }jE                  |«       t        d#|d d  › d!|› d"�d¬	«       n|dz  }tG        jH                  d$«       �Œ� tG        jH                  d%«       �Œ t
        rmtK        t
        d&d'¬(«      5 }|D ]+  }|jM                  tO        jP                  |d)¬*«      d+z   «       Œ- 	 d d d «       t        d,t
        › d!t        |«      › d-�d¬	«       |� |jS                  «        |jU                  «        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)0Nr   é<   )r   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALu
   å·²å…¥åº“ u    æ�¡, ç”¨äºŽåˆ—è¡¨çº§é¢„æŸ¥é‡�T)Úflushu"   FATAL: æ— æ³•æ��å�– template tokenr
   u   template å·²æ��å�– (z chars)zPage z fetch error (all retries)z fetch error: z: found z itemszEmpty page, stop paginationz  detail error (all retries): r   r0   z  detail error z: r™   r   é
   z  skip empty: é   )ru   rM   r5   Ú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¾   ÚprintrV   r<   r   Ú_PAGESrG   r!   rb   r)   r5   r6   r7   r~   r´   r¶   r   r   r   r[   r¹   rÆ   rÇ   rÌ   r¡   r"   r#   ÚopenÚwriter+   ÚdumpsÚcommitÚclose)rÞ   Úsr»   ÚexistingrC   Ú	new_countÚ
skip_countÚ
jsonl_rowsrF   r\   rÏ   r]   ra   rM   rP   r(   ÚdhtmlÚdtitleÚddaterv   Úattsr5   r§   Úatts_inÚall_attsÚ	plain_lenÚokÚfr½   s                                r   Úmainr÷   T  sD  € ÛØ×ÑÓ€AØ‡I�I×Ñ”WÔØ€DÝÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/Ü% dÓ+ˆÜ�
œ3˜x›=˜/Ð)GÐHÐPTÕUä˜A‹€HÙÜÐ2¸$Õ?ØÜ	Ð ¤ X£ ¨wÐ
7¸tÕDà€IØ€JØ€Jä�aœ !™Ó$ó <ˆð	Ü" 1 d¨HÓ5ˆIØÐ Ü˜˜d˜VÐ#=Ð>ÀdÕKÚð !ô ˜9Ó%ˆÜ��d�V˜8¤C¨£J <¨vÐ6¸dÕCÙÜÐ/°tÕ<ÚØ$)ó -	Ñ ˆG�U˜DÝ '¨XÑ"5Ø˜a‘�
Øð
Ü˜Q Ó(�Ø�9ÜÐ:¸7¸)ÐDÈDÕQØ !‘O�JØØŸ	™	×(Ñ(¬°YÐ(Ó?�ô
 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   Ã1 N0Å*#OÆ!OÌ1P	Î0	OÎ9OÏOÏ	PÏ#PÐPÐ	PÚ__main__)rÃ   rÔ   )4Ú__doc__Úsysrq   r   r"   Úhtmlr   Úurllib.parserW   rÊ   r+   Úbs4r   ÚImportErrorrZ   r4   rE   r¹   rÆ   rÇ   Úenvironr   r   r   r7   ÚTOTAL_PAGESr   Ú
_MAX_PAGESrŸ   Úargvr'   rJ   Ú
startswithÚintrt   Ú
ValueErrorrV   rã   r   r)   r.   r<   rG   rb   r~   r´   r¶   r¾   rÌ   r÷   Ú__name__Úexit© r   r   ú<module>r	     sÅ  ðñó Û 	Û 	Û Û Û Û Û ðÝ!ð
 '€Ø:€Ø
B€Ø!€	Ø€
Ø%€Ø
�*‰*�.‰.˜Ð$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€òó	ó	ò	.òòò.2ò<k'ò\òòòD_7ðD ˆzÒØ€C‡H�H‰T‹VÕð øð ò ØƒMðûð6 ò 	Ùð	ûð
 ò 	Ùð	ús5   ¤E Â%EÃ!E!ÅEÅEÅEÅEÅ!E)Å(E)