Ë
    ¸¬uj;  ã                   ó”  — 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Z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„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,e-d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_tl_jjkfq.py - é“œé™µç»�å¼€åŒº-é€šçŸ¥å…¬å‘Š
https://jjjskfq.tl.gov.cn/tlsjjjskfq/c00029/pc/list.html
åˆ—è¡¨: eportal JS æ³¨å…¥ var listData = {articleList: [...]} (50æ�¡/é¡µ, æ— éœ€åˆ†é¡µ)
  æ¯�é¡¹: title / pubDate / urls.pc=/tlsjjjskfq/c00029/pc/content/content_{id}.html / articleFiles(é™„ä»¶)
è¯¦æƒ…: meta ArticleTitle + meta PubDate + div.article-content
ç›´æŽ¥å†™ DB (ä¿®å¤� 2026-08-04: åŽŸ crawl_tl.py æŠ“ www.tl.gov.cn é”™é…�ä¸”å�ªå†™ JSONL)
é    N)ÚBeautifulSoupzhttps://jjjskfq.tl.gov.cnz8https://jjjskfq.tl.gov.cn/tlsjjjskfq/c00029/pc/list.htmlu   é“œé™µå¸‚ç»�æµŽæŠ€æœ¯å¼€å�‘åŒºu   å®‰å¾½zcrawl_tl_jjkfq.pyÚDB_PATHz/mnt/data/search.dbÚ
JSONL_PATHÚ úutf-8zmeta:ArticleTitlezdiv.article-contentzkMozilla/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                 ó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_tl_jjkfq.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                 óˆ  — g }| j                  d«      }|dk  r|S | |dz   d }	 t        j                  «       }|j                  |j	                  «       «      \  }}|D �]¨  }|j                  d«      xs |j                  d	«      xs d
j                  «       }	|	sŒ=t        j                  dd
|	«      }	t        |	«      }	|j                  d«      xs d
dd }
|j                  d«      xs d}	 t        |t        «      rt        j                  |«      n|}|j                  d«      xs d
j                  «       }|sŒÚt        j                   j#                  t$        |«      }g }|j                  d«      xs g D ]|  }|j                  d«      xs d
}|j                  d«      xs d
}|j                  d«      xs d
}|sŒE|sŒH|j'                  d«      r|}n|r|nt(        |z   }|j+                  ||dœ«       Œ~ |j+                  ||	|
|f«       �Œ« |S # t
        $ r}t        d|› �d¬«       |cY d}~S d}~ww xY w# t
        $ r d
}Y �Œw xY w)u5   ä»Ž eportal list.html çš„ JS å�˜é‡�æ��å�– articleListzarticleList:r   é   Nz  JSON parse error: T©ÚflushÚtitleÚ	showTitler   ú<[^>]+>ÚpubDateé
   Úurlsz{}ÚpcÚarticleFilesÚfileNameÚfilePathÚ
domainNameÚhttp)ÚnameÚurl)ÚfindÚjsonÚJSONDecoderÚ
raw_decodeÚlstripÚ	ExceptionÚprintÚgetr   r   r   r   Ú
isinstanceÚstrÚloadsÚurllibÚparseÚurljoinÚLIST_URL_P1Ú
startswithÚBASE_URLÚappend)Ú	html_textÚitemsÚiÚsegÚdecÚarrÚ_ÚeÚar   Úpub_dater!   Úur"   Úabs_urlÚattsÚfÚfnÚfpÚdnÚfus                        r   Úparse_list_jsonrN   E   s(  € à€EØ�‰�~Ó&€AØˆ1‚uØˆØ
�A˜‘F�GÐ
€CðÜ×ÑÓ ˆØ—‘ §
¡
£Ó-‰ˆˆQð ó 7ˆØ—‘�w“Ò; 1§5¡5¨Ó#5Ò;¸×BÑBÓDˆÙØÜ—‘�z 2 uÓ-ˆÜ˜EÓ"ˆØ—E‘E˜)Ó$Ò*¨¨C¨RÐ0ˆØ�u‰u�V‹}Ò$ ˆð	Ü$.¨t´SÔ$9”—
‘
˜4Ô ¸tˆAØ—%‘%˜“+Ò# ×*Ñ*Ó,ˆBñ ØÜ—,‘,×&Ñ&¤{°BÓ7ˆàˆØ—%‘%˜Ó'Ò-¨2ò 		5ˆAØ—‘�zÓ"Ò( bˆBØ—‘�zÓ"Ò( bˆBØ—‘�|Ó$Ò*¨ˆBÚ’bØ—=‘= Ô(Ø‘Bá "™"¬°BÑ6�BØ—‘ R°Ñ3Õ4ð		5ð 	�‰�g˜u h°Ð5Ö6ð97ð: €LøôA ò ÜÐ$ Q CÐ(°Õ5Ø�ûðûô ò 	Ø‹Bð	ús0   ¤6H
 Ã)A
H2È
	H/ÈH*È$H/È*H/È2IÉ Ic                 ó  — d}d}d}t         �rût        | d«      }t        j                  d«      rqt        j                  dd«      d   }|j	                  ddt        j                  |t
        j                  «      i¬«      }|r|j                  d	«      rt        |d	   «      }|sX|j	                  ddt        j                  d
t
        j                  «      i¬«      }|r|j                  d	«      rt        |d	   «      }|r%t        j                  dd|«      j                  «       }|j                  t        «      }|r"dj                  d„ |j                  D «       «      }|j	                  ddt        j                  dt
        j                  «      i¬«      }	|	rK|	j                  d	«      r:t        j                   d|	d	   j                  «       «      }
|
r|
j#                  d«      }|s)t        j$                  d| «      }
|
r|
j#                  d«      }|||fS )Nr   úhtml.parserzmeta:ú:r	   Úmetar(   )ÚattrsÚcontentÚArticleTitleu;   (?:\s*(?:å�‘å¸ƒæ—¥æœŸ[:ï¼š]\s*)?\d{4}-\d{1,2}-\d{1,2})+\s*$c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)r3   )Ú.0Úcs     r   ú	<genexpr>zparse_detail.<locals>.<genexpr>†   s   è ø€ Ò"?¨a¤3 q§6Ñ"?ùs   ‚zPubDate|publishdatez(\d{4})-(\d{2})-(\d{2})r   )r   ÚDTITLE_MODEr9   Úsplitr*   r   ÚcompileÚIr1   r   r   r   Ú
select_oneÚDCONTENT_SELÚjoinÚcontentsÚmatchÚgroupÚsearch)r<   Úpage_urlr   ÚdateÚcontent_htmlÚsoupr(   ÚmtÚelÚmdÚdms              r   Úparse_detailrm   s   s­  € Ø€EØ€DØ€LÞÜ˜Y¨Ó6ˆÜ×!Ñ! 'Ô*Ü×$Ñ$ S¨!Ó,¨QÑ/ˆDØ—‘˜6¨&´"·*±*¸TÄ2Ç4Á4Ó2HÐ)I�ÓJˆBÙ�b—f‘f˜YÔ'Ü# B y¡MÓ2�ÙØ—‘˜6¨&´"·*±*¸_ÌbÏdÉdÓ2SÐ)T�ÓUˆBÙ�b—f‘f˜YÔ'Ü# B y¡MÓ2�ÙÜ—F‘FÐYÐ[]Ð_dÓe×kÑkÓmˆEØ�_‰_œ\Ó*ˆÙØŸ7™7Ñ"?°2·;±;Ô"?Ó?ˆLØ�Y‰Y�v f¬b¯j©jÐ9OÔQS×QUÑQUÓ.VÐ%WˆYÓXˆÙ�"—&‘&˜Ô#Ü—‘Ð4°b¸±m×6IÑ6IÓ6KÓLˆBÙØ—x‘x “{�ÙÜ—‘Ð5°yÓAˆBÙØ—x‘x “{�Ø�$˜Ð$Ð$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         j                  ¬«      } t        j                  d	d| «      } t        j                  d
d| «      } t        �ra	 t	        | d«      }|j                  dd¬«      D �]  }|j                  d«      sG|j                  d«      s6t        j                  d|j                  dd«      t         j                  «      sŒ\|d   }|j                  d¬«      xsD |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 |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)        |«      } ˆˆˆfd&„}t        j                  d'|| t         j                  t         j                  z  ¬«      } t        rQ	 t	        | d«      }|j                  d«      D ]%  }d(D ]  }|j,                  j/                  |d «       Œ  Œ' t)        |«      } g Šˆfd)„}t        j                  d*|| t         j                  t         j                  z  ¬«      } t        j                  d+| t         j                  «      rd,nd}t        j                  d%d-| t         j                  ¬«      } t        j                  d.d/| t         j                  ¬«      } t        j                  d0d| t         j                  ¬«      } g }| j                  d1«      D ]ï  }|j1                  «       }|sŒt        j                  d2d|«      }t3        j4                  |«      }|j7                  d3d4«      j7                  d5d4«      }t        j                  d6d|«      }|sŒ~‰j9                  «       D ]  \  }}|j7                  ||«      }Œ t;        ‰«      D ]  \  }}|j7                  d7|› d�|«      }Œ |j!                  |j1                  «       «       Œñ d1j'                  |«      }‰j9                  «       D ]  \  }}|j7                  ||«      }Œ t;        ‰«      D ]  \  }}|j7                  d7|› d�|«      }Œ t        j                  d8d|«      }t        j                  d9d|«      }t        j                  d:d|«      }t        j                  d;d|«      }t3        j4                  |«      }t        j                  d<d/|«      }t        j                  d=d1|«      }t        j                  d>d4|«      }t=        «       }g }|j                  d1«      D ]X  }t        j                  d?dt        j                  d2d|«      «      }|sŒ2||v rŒ7|j?                  |«       |j!                  |«       ŒZ d1j'                  |«      j1                  «       }||‰fS # t*        $ r Y �Œ:w xY w# t*        $ r Y �Œ´w xY w)@Nr   r   z
<!--.*?-->)Úflagsz<meta[^>]*>z<script[^>]*>.*?</script>z<style[^>]*>.*?</style>z;<img[^>]*src="[^"]*fileTypeImages/icon_[a-z]+\.gif"[^>]*/?>u   ã€�å­—å�·ï¼š[^ã€‘]*ã€‘u'   å�‘å¸ƒ(?:æ—¶é—´|æ—¥æœŸ)[:ï¼š][^<]{0,30}rP   rD   T)ÚhrefÚappendixzdata-appendixz\.(pdf|docx?|xlsx?|zip|rar)rp   )r   Ú_titleú?Ú
__ATTACH__Ú__z<p><a href="ú" target="_blank">ú</a></p>ÚpÚimgÚsrcÚoldsrcú	<a href="u   å›¾ç‰‡ú</a>Ú__IMG__z<p>z<br/>z</p>c                 ó  •— | j                  d«      }| 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        ‰«      › d
�}d|› d|› d�‰|<   |S )Nr	   é   r   r   u   ^é™„ä»¶[:ï¼š]\s*rs   r   u   é™„ä»¶Ú__LINK__ru   r|   rv   r}   )rc   r   r   r   r   r   ÚosÚpathÚbasenamer[   r5   r6   r7   r;   Úlen)	Úmrp   ÚinnerÚtxtrG   ÚkeyÚattachmentsÚlink_protectre   s	         €€€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˜>Ô*Øœ˜\Ó*Ð+¨2Ð.ˆØ'¨ yÐ0BÀ3À%ÀtÐLˆ�SÑØˆ
r   z&<a\s[^>]*href="([^"]+)"[^>]*>(.*?)</a>)ÚstyleÚclassÚlangÚdirÚalignÚvalignÚwidthÚheightÚborderÚcellpaddingÚcellspacingc                 óh   •— ‰j                  | j                  d«      «       dt        ‰«      dz
  › d�S )Nr   Ú__TBL__r	   ru   )r;   rc   r…   )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	   z</p>

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

r   õ   Â 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   ÚSr]   r   Úfind_allr1   rd   Úget_textr‚   rƒ   r„   r[   r5   r6   r7   r;   r…   Úreplace_withr`   r3   r/   rS   Úpopr   r   r   r   r=   Ú	enumerateÚsetÚadd) rT   re   Ú_souprD   rp   rˆ   rG   r‰   rx   ÚimgsÚsrcsry   rz   rŒ   ÚtagÚattrr›   Ú	has_tableÚpartsÚblockÚbÚplainÚkÚvr>   ÚtblÚoutÚseenÚfinalrŠ   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ØFÈÈGÜ�d‰dô€Gô �f‰fÐ.°°GÓ<€GÜ�f‰fÐ?ÀÀWÓM€Gæð	Ü! '¨=Ó9ˆEØ—^‘^ C¨d�^Ó3ó (�Ø—5‘5˜Ô$¨¯©¨oÔ(>Ä"Ç)Á)ÐLjÐlm×lqÑlqÐrxÐz|Ól}ô  @B÷  @Dñ  @Dõ  CEØ˜V™9�DØŸ*™*¨4˜*Ó0Òk°A·E±E¸(³OÒkÄrÇwÁw×GWÑGWÐX\×XbÑXbÐcfÓXgÐhiÑXjÓGk�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ÒG°·±¸Ó0AÒGÀR˜ÚÜ&,§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öô �f‰fÐ>À
ÈGÔ[]×[_Ñ[_Ôbd×bfÑbfÑ[fÔg€Gåð	Ü! '¨=Ó9ˆEØ—~‘~ dÓ+ò .�ð Lò .�DØ—I‘I—M‘M $¨Õ-ñ.ð.ô ˜%“jˆGð €Mô2ô �f‰fÐ/°¸GÌ2Ï4É4ÔRT×RVÑRVÉ;ÔW€GÜ—Y‘Y˜°¼¿¹Ô>‘ÀA€Iä�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à�	˜;Ð&Ð&øôi ò 	Úð	ûô2 ò 	Úð	úsG   Ä+A:^9 Æ&C'^9 Ê^9 Ê!1^9 ËA/^9 ÍA^9 ÏA_	 Þ9	_ß_ß		_ß_c                 óÖ  — | j                  d|t        f«      }|j                  «       ry	 d}	 ddlm}	  |	|«      }|r|D ]  }
|d|
d   › d|
d	   › d
�z  }Œ | 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

<p><a href="r)   rv   r(   rw   z¨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   éÈ   zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)TÚlockedé   )ÚexecuteÚ	SITE_NAMEÚfetchoneÚcrawler_libr¹   r/   Ú
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr   r   r   r   r   Ú	lastrowidÚsqlite3ÚOperationalErrorr3   ÚtimeÚsleepÚstore_record)Úconnr)   r   rT   rf   r«   rH   ÚcurÚindustryr¹   ÚatÚsummaryrC   s                r   rÉ   rÉ     s€  € Ø
�,‰,ÐPÐSVÔXaÐRbÓ
c€CØ
‡|�|„~ØðØˆð	Ý5Ù(¨Ó/ˆHñ Øò `�ØÐ-¨b°©i¨[Ð8JÈ2ÈfÉ:È,ÐV^Ð_Ñ_‘ð`à�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ÀÈDÓQÕQØûð	úsF   «D ®D ¼C
D Ä	DÄD ÄDÄD ÄE(Ä*2E#ÅE(Å"E#Å#E(c                 ó¨   — | j                  |t        dd¬«      }|j                  dk(  rd|_        |j                  S t        d|j                  › �«      ‚)Né   F©ÚheadersÚtimeoutÚverifyrº   r   zHTTP )r1   ÚHEADERSÚstatus_codeÚencodingÚtextÚRuntimeError)Úsessionr)   Úrs      r   Úfetch_detailrÜ   <  sJ   € Ø�‰�C¤°"¸UˆÓC€AØ‡}�}˜ÒØˆŒ
Ø�v‰vˆÜ
˜˜qŸ}™}˜oÐ.Ó
/Ð/r   c                  óð  — dd l } | j                  «       }|j                  j                  t        «       d }t
        s=t        j                  t        d¬«      }|j                  d«       |j                  d«       d}d}t        «       }g }t        dt        dz   «      D �]¨  }	 |j                  t        t        dd¬	«      }d
|_        |j                   }	t'        |	«      }t%        d|› dt)        |«      › d�d¬«       |st%        dd¬«        �n=|D �]4  \  }}}}||v rŒ|j+                  |«       	 t-        ||«      }t/        ||«      \  }}}|s|}|s|}t1        ||«      \  }}}t)        t3        j4                  dd|«      j7                  «       «      }|dk  r|st%        d|d d › �d¬«       |dz  }Œ¢t
        rC|j9                  |||||t:        t<        t>        dœ«       t%        d|d d › d|› d�d¬«       |dz  }ŒëtA        |||||||«      }|r|dz  }t%        d|d d › d|› d�d¬«       n|dz  }tC        jD                  d«       �Œ7 �Œ« t
        rmtG        t
        dd
¬ «      5 }|D ]+  }|jI                  tK        jL                  |d¬!«      d"z   «       Œ- 	 d d d «       t%        d#t
        › dt)        |«      › d$�d¬«       |� |jO                  «        |jQ                  «        t%        d%|› �d¬«       t%        d&|› �d¬«       t%        d't:        › d(�d¬«       y # t"        $ r}
t%        d|› d|
› �d¬«       Y d }
~
 Œíd }
~
ww xY w# t"        $ r#}
t%        d|› d|
› �d¬«       |dz  }Y d }
~
�ŒWd }
~
ww xY w# 1 sw Y   ŒÛxY w))Nr   é<   )rÓ   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALr	   rÐ   FrÑ   r   zPage z fetch error: Tr   z: found z itemszEmpty page, stopz  detail error z: r   r   r    z  skip empty: )re   r   rT   Úpublish_dater«   Ú	site_nameÚ
group_nameÚscript_namez
  JSONL + é(   z (ú)z  + g      Ð?Úw)r×   )Úensure_asciirœ   zJSONL written: z rows)u   æ–°å¢ž: u   è·³è¿‡: z=== z	 done ===))ÚrequestsÚSessionrÒ   ÚupdaterÕ   r   rÅ   Úconnectr   r½   r¤   ÚrangeÚ_PAGESr1   r8   r×   rØ   r/   r0   rN   r…   r¥   rÜ   rm   r¶   r   r   r   r;   r¾   rÁ   rÂ   rÉ   rÇ   rÈ   ÚopenÚwriter+   ÚdumpsÚcommitÚclose)rç   ÚsrÊ   Ú	new_countÚ
skip_countÚ	seen_urlsÚ
jsonl_rowsÚpagerÛ   r<   rC   r=   rG   r   rf   rH   ÚdhtmlÚdtitleÚddaterg   rT   r«   rB   Ú	plain_lenÚokrI   Úrows                              r   Úmainrþ   D  sˆ  € ÛØ×ÑÓ€AØ‡I�I×Ñ”WÔØ€DÝÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/à€IØ€JÜ“€IØ€Jä�aœ !™Ó$ó 2ˆð	Ø—‘”k¬7¸BÀu�ÓMˆAØ ˆAŒJØŸ™ˆIô   	Ó*ˆÜ��d�V˜8¤C¨£J <¨vÐ6¸dÕCÙÜÐ$¨DÕ1ÚØ*/ó %	Ñ&ˆG�U˜D $Ø˜)Ñ#ØØ�M‰M˜'Ô"ðÜ$ Q¨Ó0�ô
 +7°u¸gÓ*FÑ'ˆF�E˜<ÙØ�ÙØ�Ü$0°¸wÓ$GÑ!ˆG�Y Üœ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ÐPTÓUˆBÙØ˜Q‘�	Ü˜˜V C R˜[˜M¨¨E¨7°!Ð4¸DÖAà˜a‘�
Ü�J‰J�tÖòK%	ð2õh Ü”*˜c¨GÔ4ð 	D¸Ø!ò D�Ø—‘œŸ
™
 3°UÔ;¸dÑBÕCñD÷	Dô 	�¤
˜|¨2¬c°*«oÐ->¸fÐEÈTÕRàÐØ�‰ŒØ�
‰
ŒÜ	ˆH�Y�KÐ
 ¨Õ-Ü	ˆH�Z�LÐ
!¨Õ.Ü	ˆD”�˜9Ð
%¨TÖ2øôu ò 	Ü�E˜$˜˜~¨a¨SÐ1¸Õ>Ýûð	ûô ò Ü˜¨ y°°1°#Ð6¸dÕCØ˜a‘�
Ýûðú÷D	Dð 	Dús<   Â!0LÄ-L=É 1M,Ì	L:ÌL5Ì5L:Ì=	M)ÍM$Í$M)Í,M5Ú__main__).Ú__doc__Úsysr‚   r   rÇ   r+   Úhtmlr   Úurllib.parser5   rÅ   Úbs4r   ÚImportErrorr:   r8   r¾   rÁ   rÂ   Úenvironr1   r   r   ÚENCrZ   r_   rÕ   Ú
_MAX_PAGESr£   Úargvr>   rD   r9   Úintr[   Ú
ValueErrorr…   rì   r   rN   rm   r¶   rÉ   rÜ   rþ   Ú__name__© r   r   ú<module>r     s   ðñó Û 	Û 	Û Û Û Û Û ðÝ!ð
 '€ØH€Ø,€	Ø€
Ø!€Ø
�*‰*�.‰.˜Ð$9Ó
:€Ø�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€òò+ò\%ò@@'òF#òL0òN3ðb ˆzÒÙ…Fð øð ò ØƒMðûð4 ò 	Ùð	ûð
 ò 	Ùð	ús5   ¤D& Â$D4Ã D?Ä&D1Ä0D1Ä4D<Ä;D<Ä?EÅE