Ë
    ¸¬uj1<  ã                   ó€  — 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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dlZej2                  j4                  j7                  «        ddddœZdZ eej@                  «      D ]k  \  Z!Z"e"jG                  d«      r	  e$e"jK                  dd«      d   «      ZŒ4e"dk(  sŒ:e!dz    e'ej@                  «      k  sŒS	  e$ej@                  e!dz      «      ZŒm edk\  rendZ( eej@                  «      D ]6  \  Z!Z"e"dk(  sŒe!dz    e'ej@                  «      k  sŒ%ej@                  e!dz      ZŒ8 d d„Z)d„ Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/d„ Z0e1dk(  r e0«        yy# e$ r Y �Œw xY w# e&$ r Y Œüw xY w# e&$ r Y �Œw xY w)!u=  
crawl_hejian_sthj.py - æ²³é—´å¸‚-ç”Ÿæ€�çŽ¯å¢ƒ
https://www.hejian.gov.cn/hejian/c107617/list.shtml
åˆ—è¡¨: table.zb_tab > tr > td.name_detail > a (æ ‡é¢˜CSSæˆªæ–­,é¡»è¯¦æƒ…é¡µå�–å®Œæ•´)
  æ¯�è¡Œ4td: æ ‡é¢˜ | æ�¥æº� | åˆ†ç±» | æ—¥æœŸ
åˆ†é¡µ: list_{N}.shtml (createPageHTML('page_tag',50,1,'list','shtml',1000) â†’ 20é¡µ)
è¯¦æƒ…: meta ArticleTitle(å®Œæ•´æ ‡é¢˜) + meta PubDate(çœŸå®žæ—¥æœŸ) + div.file_detail æ­£æ–‡
  æŽ’é™¤: div.location_ breadcrumb / ul.category å…ƒæ•°æ�® / div.operation æ‰“å�°æŒ‰é’®
é™„ä»¶: a href ç›¸å¯¹è·¯å¾„ {hash}/files/xxx.zip â†’ urljoin è½¬ç»�å¯¹
é    N)ÚBeautifulSoupzhttps://www.hejian.gov.cnz3https://www.hejian.gov.cn/hejian/c107617/list.shtmlz:https://www.hejian.gov.cn/hejian/c107617/list_{page}.shtmlu   æ²³é—´å¸‚-ç”Ÿæ€�çŽ¯å¢ƒu   æ²³åŒ—zcrawl_hejian_sthj.pyÚDB_PATHz/mnt/data/search.dbÚ
JSONL_PATHÚ 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--pagesz--jsonlc                 ó<  — t        |«      D ]4  }	 t        j                  | t        dd¬«      }d|_        |j
                  c S  y	# t        $ rN}||dz
  k(  r't        d| › d|› �t        j                  ¬«       Y d }~ y	t        j                  d
«       Y d }~ŒŠd }~ww xY w)Né   F)ÚheadersÚtimeoutÚverifyúutf-8r   z	  [WARN] z: )Úfiler   g      @)ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)ÚurlÚretriesÚiÚrÚes        ú&/root/gov_crawler/crawl_hejian_sthj.pyÚ
fetch_pager#   B   sŒ   € Ü�7‹^ò 	ˆð	Ü—‘˜S¬'¸2ÀeÔLˆAØ ˆAŒJØ—6‘6ŠMð		ð øô ò 	Ø�G˜a‘KÒÜ˜	 #  b¨¨Ð,´3·:±:Õ>ÝÜ�J‰J�s�O‰Oûð		ús   �/AÁ	BÁ)BÁ<BÂB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    r"   Úclean_titler.   P   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        j                  d| «      }|rHt        |j                  d«      «      }t        |j                  d«      «      }|dz   dz  }t	        d|«      S y)u«   ä»Ž createPageHTML('page_tag', æ¯�é¡µæ�¡æ•°, å½“å‰�é¡µ, 'list', 'shtml', æ€»æ•°) æ��å�–æ€»é¡µæ•°
    âš ï¸� æ²³é—´å®žé™…æ¯�é¡µ 20 æ�¡(é�žå�‚æ•°å€¼50), æ€»æ•°1000 â†’ 50é¡µzzcreatePageHTML\s*\(\s*['\"]page_tag['\"]\s*,\s*(\d+)\s*,\s*\d+\s*,\s*['\"][^'\"]*['\"]\s*,\s*['\"][^'\"]*['\"]\s*,\s*(\d+)r   é   é   é   )r*   ÚsearchÚintÚgroupÚmax)Ú	html_textÚmÚper_pageÚtotal_itemsÚpagess        r"   Úget_total_pagesr=   Z   sc   € ô 	�	‰	ð  Pð  R[ó  	\€AÙÜ�q—w‘w˜q“z“?ˆÜ˜!Ÿ'™' !›*“oˆà˜rÑ! bÑ(ˆÜ�1�e‹}ÐØr/   c                 óˆ  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  d«      D �]  }|j                  d«      }t        |«      dk  rŒ$|d   j                  d	d
¬«      }|sŒ=|j	                  dd«      }t        |j                  d
¬«      «      }t        |d   j                  d
¬«      «      }	|r|sŒ�t        j                  d|«      r|}t        j                  j                  t        |«      }
t        j                  d|	«      }|r|j                  d«      nd}	|j                  |
||	f«       �Œ
 |S )Núhtml.parserÚtableÚzb_tab©Úclass_ÚtrÚtdé   r   ÚaT©ÚhrefrI   r   ©r,   é   z
\.{3,}\s*$ú(\d{4}-\d{2}-\d{2})r   )r   ÚfindÚfind_allÚlenr   r.   Úget_textr*   r4   ÚurllibÚparseÚurljoinÚLIST_URL_P1r6   Úappend)r8   ÚitemsÚsoupÚtbrD   ÚtdsrG   rI   ÚtitleÚdateÚabs_urlÚdms               r"   Ú
parse_listr^   g   s(  € Ø€EÜ˜ MÓ2€DØ	�‰�7 8ˆÓ	,€BÙØˆØ�k‰k˜$Óó -ˆØ�k‰k˜$ÓˆÜˆs‹8�aŠ<ØØ�‰F�K‰K˜ $ˆKÓ'ˆÙØØ�u‰u�V˜RÓ ˆÜ˜AŸJ™J¨T˜JÓ2Ó3ˆÜ˜3˜q™6Ÿ?™?°˜?Ó6Ó7ˆÙ™5ØÜ�9‰9�] EÔ*ØˆEÜ—,‘,×&Ñ&¤{°DÓ9ˆÜ�Y‰YÐ-¨tÓ4ˆÙ ˆr�x‰x˜Œ{ bˆØ�‰�g˜u dÐ+Ö,ð#-ð$ €Lr/   c                 óÆ  — d}d}d}t        | d«      }|j                  ddt        j                  dt        j                  «      i¬«      }|r|j                  d«      rt        |d   «      }|j                  ddt        j                  dt        j                  «      i¬«      }|rK|j                  d«      r:t        j                  d	|d   j                  «       «      }|r|j                  d
«      }|j                  dd¬«      }	|	rZdj                  d„ |	j                  D «       «      }t        j                  dd|t        j                  t        j                  z  ¬«      }|||fS )Nr   r?   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentzPubDate|publishdaterL   r   ÚdivÚfile_detailrB   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)Ústr)Ú.0Úcs     r"   ú	<genexpr>zparse_detail.<locals>.<genexpr>’   s   è ø€ Ò;¨!œs 1ŸvÑ;ùs   ‚z<h1[^>]*>.*?</h1>©Úflags)r   rM   r*   ÚcompileÚIr   r.   Úmatchr,   r6   ÚjoinÚcontentsr+   ÚS)
r8   Úpage_urlrZ   r[   Úcontent_htmlrW   ÚmtÚmdr]   Úels
             r"   Úparse_detailry   ‚   s   € Ø€EØ€DØ€LÜ˜ MÓ2€DØ	�‰�6 &¬"¯*©*°_ÄbÇdÁdÓ*KÐ!LˆÓ	M€BÙ	ˆb�f‰f�YÔÜ˜B˜y™MÓ*ˆØ	�‰�6 &¬"¯*©*Ð5KÌRÏTÉTÓ*RÐ!SˆÓ	T€BÙ	ˆb�f‰f�YÔÜ�X‰XÐ,¨b°©m×.AÑ.AÓ.CÓDˆÙØ—8‘8˜A“;ˆDà	�‰�5 ˆÓ	/€BÙ	Ø—w‘wÑ;¨r¯{©{Ô;Ó;ˆä—v‘vÐ2°B¸ÌBÏDÉDÔSU×SWÑSWÉKÔXˆØ�$˜Ð$Ð$r/   c                 ór  ‡‡‡‡ — | 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	        | d
«      }|j                  dd¬«      D �]h  }|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!                  d«      s|j!                  d«      rd|z   n|}‰j#                  ||f«       dt%        ‰«      › d�}d|› d|› d�‰|<   |j'                  |«       �Œk |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	        | d
«      }|j                  d«      D ]%  }d)D ]  }|j,                  j/                  |d «       Œ  Œ' t+        |«      } g Š ˆ fd*„}t        j                  d+| t         j                  «      rd,nd}t        j                  d-|| t         j                  t         j                  z  ¬«      } t        j                  d&d.| t         j                  ¬«      } t        j                  d/d0| t         j                  ¬«      } t        j                  d1d| t         j                  ¬«      } g }| j                  d2«      D �]W  }|j3                  «       }|sŒt        j                  d3d|«      }t        j                  d4d|«      }|j5                  d5d«      j5                  d6d7«      }t        j                  d8d7|«      }t        j                  d9d|«      }t7        j8                  |«      }|j5                  d:d7«      j5                  d;d7«      }t        j                  d<d|«      }|sŒæ‰j;                  «       D ]  \  }}|j5                  ||«      }Œ t=        ‰ «      D ]  \  }}|j5                  d=|› d�|«      }Œ |j#                  |j3                  «       «       �ŒZ d2j)                  |«      }‰j;                  «       D ]  \  }}|j5                  ||«      }Œ t=        ‰ «      D ]  \  }}|j5                  d=|› d�|«      }Œ t        j                  d>d|«      }t        j                  d?d|«      }t        j                  d@d|«      }t        j                  dAd|«      }t        j                  dBd0|«      }t        j                  dCd2|«      }t        j                  d8d7|«      }t?        «       }g }|j                  d2«      D ]X  }	t        j                  dDdt        j                  d9d|	«      «      }|sŒ2||v rŒ7|jA                  |«       |j#                  |	«       ŒZ d2j)                  |«      j3                  «       }||‰fS # t0        $ r Y �Œøw xY w)ENr   r   z
<!--.*?-->rl   z<meta[^>]*>z<script[^>]*>.*?</script>z<style[^>]*>.*?</style>u   ã€�å­—å�·ï¼š[^ã€‘]*ã€‘u'   å�‘å¸ƒ(?:æ—¶é—´|æ—¥æœŸ)[:ï¼š][^<]{0,30}r?   rG   TrH   Úappendixzdata-appendixz&\.(pdf|docx?|xlsx?|zip|rar|wps|et|ofd)rI   ÚoldsrcrJ   Ú_titlerZ   ú?©zhttp://zhttps://ú//úhttp:Ú
__ATTACH__Ú__ú	<a href="ú" target="_blank">ú</a>ÚpÚimgÚsrcu   å›¾ç‰‡Ú__IMG__z<p>z<br/>z</p>c                 óŠ  •— | 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                  d
«      s|j                  d«      rd|z   n|}‰j                  ||f«       dt        ‰«      › d�}d|› d|› d�‰|<   |S )Nr   zjavascript:r   r1   ú<[^>]+>u   ^é™„ä»¶[:ï¼š]\s*r~   r   u   é™„ä»¶r   r€   r�   Ú__LINK__rƒ   r„   r…   r†   )r6   Ú
startswithr*   r+   r'   r(   r,   ÚosÚpathÚbasenameÚsplitrQ   rR   rS   rU   rO   )	r9   rI   ÚinnerÚtxtr\   ÚkeyÚattachmentsÚlink_protectrt   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ˆØ×!Ñ!Ð"9Ô:Ø+2×+=Ñ+=¸dÔ+C�g Ò'ÈˆGØ×Ñ˜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   rƒ   )rU   r6   rO   )r9   Útable_protects    €r"   Ú	_tbl_replzhtml_to_text.<locals>._tbl_replß   s3   ø€ Ø×Ñ˜QŸW™W Q›ZÔ(Øœ˜]Ó+¨AÑ-Ð.¨bÐ1Ð1r/   z<table[^>]*>r   z<table[^>]*>.*?</table>z</p>

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

z(?<=>)\s*[\r\n\t]+\s*z\s*[\r\n\t]+\s*(?=<)úú	r&   z	[ \t]{2,}rŒ   õ   Â z&nbsp;z[\s\u200b\u200c\u200d\ufeff]+r¥   z__LINK__\d+__z__TBL__\d+__z__IMG__\d+__z__ATTACH__\d+__z[ \t]+\nz\n{3,}r%   )!r*   r+   rs   ro   r   rN   r   r4   rP   r�   r�   r‘   r’   rQ   rR   rS   rŽ   rU   rO   Úreplace_withrq   rh   rc   Úpopr   r,   r)   r'   r(   rV   Ú	enumerateÚsetÚadd)!rd   rt   Ú_souprG   rI   Ú	real_hrefr”   r\   r•   r‡   ÚimgsÚsrcsrˆ   r‰   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Ð.°°GÓ<€GÜ�f‰fÐ?ÀÀWÓM€Gä˜' =Ó1€EØ�^‰^˜C dˆ^Ó+ó  ˆØ�5‰5�Ô §¡ oÔ 6¼"¿)¹)ÐDmÐop×otÑotÐu{Ð}ó  pAô  CE÷  CGñ  CGõ  ;HØ�V‘9ˆDØŸ™˜h›Ò/¨4ˆIØ—*‘* 4�*Ó(Òz¨A¯E©E°(«OÒz¸q¿u¹uÀW»~ÒzÔQS×QXÑQX×QaÑQaÐbk×bqÑbqÐruÓbvÐwxÑbyÓQzˆCÜ—l‘l×*Ñ*¨8°YÓ?ˆGØ×%Ñ%Ð&=Ô>Ø/6×/AÑ/AÀ$Ô/G˜' GÒ+ÈW�Ø×Ñ ¨˜~Ô.Øœs <Ó0Ð1°Ð4ˆCØ"+¨G¨9Ð4FÀsÀeÈ4Ð PˆL˜ÑØ�N‰N˜3Öð ð �^‰^˜CÓ ó $ˆØ�z‰z˜%Ó ˆÚ˜Ÿ
™
¨˜
Õ.ØˆDØò ~�Ø—g‘g˜e“nÒ?¨¯©°Ó(9Ò?¸R�ÚÜ$Ÿl™l×2Ñ2°8¸SÓA�GØ—K‘K )¨G¨9Ð4FÄrÇwÁw×GWÑGWÐX[×XaÑXaÐbeÓXfÐghÑXiÓGjÒGvÐnvÐFwÐw{Ð |Õ}ð	~ò
 Ø¤ LÓ 1Ð2°"Ð5�Ø$)¨G¯L©L¸Ó,>Ñ$>ÀÑ$G�˜SÑ!Ø—‘˜sÖ#ð$ô �%‹j€Göô" �f‰fÐ>À
ÈGÔ[]×[_Ñ[_Ôbd×bfÑbfÑ[fÔg€GðÜ˜g }Ó5ˆØ—>‘> $Ó'ò 	*ˆCð Hò *�Ø—	‘	—‘˜d DÕ)ñ*ð	*ô �e“*ˆð €Mô2ô —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ÐLÈbÐRYÔac×aeÑaeÔf€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ˆÙØØ ×&Ñ&Ó(ò 	 ‰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ä
�&‰&�˜d CÓ
(€CÜ
�&‰&�˜F CÓ
(€CÜ
�&‰&�˜s CÓ
(€Cä‹5€DØ€EØ�Y‰Y�vÓò ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÙØØ�$‰;ØØ�‰�ŒØ�‰�Q�ðð �+‰+�eÓ
×
"Ñ
"Ó
$€Cà�	˜;Ð&Ð&øô} ò Úðús   Ï-A`) à)	`6à5`6c                 ót  — | j                  d|t        f«      }|j                  «       ry	 d}	 ddlm}  ||«      }| j                  d|||||t        t        t        ||f
«      }|j                  dkD  rdt        j                  dd|«      }	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&   éÈ   zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)TÚlockedrK   )ÚexecuteÚ	SITE_NAMEÚfetchoneÚcrawler_librÅ   r   Ú
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr*   r+   r,   Ú	lastrowidÚsqlite3ÚOperationalErrorrh   r   r   Ústore_record)Úconnr   rZ   rd   r[   r·   ÚcurÚindustryrÅ   Úsummaryr!   s              r"   rÒ   rÒ     s6  € Ø
�,‰,ÐPÐSVÔXaÐRbÓ
c€CØ
‡|�|„~ØðØˆð	Ý5Ù(¨Ó/ˆHð �l‰lð+ð �#�u˜g t¬Y¼
ÄKÐQZÐ\dÐeó	
ˆð �<‰<˜!ÒÜ—f‘f˜Z¨¨WÓ5ˆ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' Ã	C$Ã!C' Ã#C$Ã$C' Ã'D7Ã:1D2Ä+D7Ä1D2Ä2D7c                  ó  — d } t         s=t        j                  t        d¬«      } | j	                  d«       | j	                  d«       d}d}t        «       }g }t        t        «      }t        |«      }t        t        |«      }t        d|› d|› �d¬	«       t        d
|d
z   «      D �]  }|d
k(  rt        nt        j                  |¬«      }	|d
k(  r|n
t        |	«      }
|
st        d|› d�d¬	«        �n¼t        |
«      }t        d|› dt!        |«      › d�d¬	«       |st        dd¬	«        �n‚|D �]d  \  }}}||v rŒ|j#                  |«       t        |«      }|s|d
z  }Œ1t%        ||«      \  }}}|s|}|r|}t'        ||«      \  }}}t!        t)        j*                  dd|«      j-                  «       «      }t)        j.                  d|t(        j0                  «       xr | }|dk  s|rt        d|d d › �d¬	«       |d
z  }ŒÒt         rD|j3                  |||||t4        t6        t8        dœ«       t        d|d d › d|› d�d¬	«       |d
z  }�Œt;        | |||||«      }|r|d
z  }t        d|d d › d|› d�d¬	«       n|d
z  }t=        j>                  d«       �Œg t=        j>                  d«       �Œ t         rmtA        t         dd¬ «      5 }|D ]+  }|jC                  tE        jF                  |d!¬"«      d#z   «       Œ- 	 d d d «       t        d$t         › dt!        |«      › d%�d¬	«       | � | jI                  «        | jK                  «        t        d&|› �d¬	«       t        d'|› �d¬	«       t        d(t4        › d)�d¬	«       y # 1 sw Y   Œ‚xY w)*Né<   )r   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALr   zTotal pages: z, running: T)Úflushr   )ÚpagezPage z fetch errorz: found z itemszEmpty page, stop paginationrŒ   r   z<p[ >]é
   z  skip empty/placeholder: é(   )rt   rZ   rd   Úpublish_dater·   Ú	site_nameÚ
group_nameÚscript_namez
  JSONL + z (ú)z  + g      Ð?g      à?Úwr   )r   F)Úensure_asciir¨   zJSONL written: z rows)u   æ–°å¢ž: u   è·³è¿‡: z=== z	 done ===)&r   rÐ   Úconnectr   rÈ   r¯   r#   rT   r=   ÚminÚ_PAGESr   r   ÚLIST_URL_PNÚformatr^   rO   r°   ry   rÂ   r*   r+   r,   r4   ro   rU   rÉ   rÌ   rÍ   rÒ   r   r   ÚopenÚwriteÚjsonÚdumpsÚcommitÚclose)rÓ   Ú	new_countÚ
skip_countÚ	seen_urlsÚ
jsonl_rowsÚ
first_htmlÚtotal_pagesÚpages_to_runrÚ   r   r8   rV   r\   rZ   r[   ÚdhtmlÚdtitleÚddateru   rd   r·   ÚattsÚ	plain_lenÚno_paraÚokÚfÚrows                              r"   Úmainrÿ   =  sˆ  € Ø€DÝÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/à€IØ€JÜ“€IØ€Jô œKÓ(€JÜ! *Ó-€KÜ”v˜{Ó+€LÜ	ˆM˜+˜ k°,°Ð
@ÈÕMä�a˜¨Ñ)Ó*ó 2ˆØ! QšY�k¬K×,>Ñ,>ÀDÐ,>Ó,IˆØ"&¨!¢)‘J´¸C³ˆ	ÙÜ�E˜$˜˜|Ð,°DÕ9ÚÜ˜9Ó%ˆÜ��d�V˜8¤C¨£J <¨vÐ6¸dÕCÙÜÐ/°tÕ<ÚØ$)ó &	Ñ ˆG�U˜DØ˜)Ñ#ØØ�M‰M˜'Ô"Ü˜wÓ'ˆEÙØ˜a‘�
ØÜ*6°u¸gÓ*FÑ'ˆF�E˜<ÙØ�ñ Ø�Ü'3°LÀ'Ó'JÑ$ˆG�Y ÜœBŸF™F :¨r°7Ó;×AÑAÓCÓDˆIÜŸ)™) I¨|¼R¿T¹TÓBÐBÒTÈ9À}ˆGØ˜2Š~¡ÜÐ2°6¸#¸2°;°-Ð@ÈÕMØ˜a‘�
ØÝØ×!Ñ!Ø '°&ÀWØ$)¸	Ü!*¼*Ü#.ñ	#ô ô ˜
 6¨#¨2 ; -¨r°%°¸Ð:À$ÕGØ˜Q‘�	ÙÜ˜d G¨V°W¸eÀYÓOˆBÙØ˜Q‘�	Ü˜˜V C R˜[˜M¨¨E¨7°!Ð4¸DÖAà˜a‘�
Ü�J‰J�tÖðM&	ôN 	�
‰
�3Žðe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÷	Dð 	Dús   Ë1M6Í6M?Ú__main__)é   )2Ú__doc__r   r�   r*   r   rë   rÐ   Úhtmlr'   Úurllib.parserQ   r   Úbs4r   ÚBASE_URLrT   rç   rÉ   rÌ   rÍ   Úenvironr   r   r   Úrequests.packages.urllib3ÚpackagesÚurllib3Údisable_warningsr   r   Ú
_MAX_PAGESr®   Úargvr   rG   rŽ   r5   r’   Ú
ValueErrorrO   ræ   r#   r.   r=   r^   ry   rÂ   rÒ   rÿ   Ú__name__© r/   r"   ú<module>r     sü  ðñ	ó Û 	Û 	Û Û Û Û Û Û Ý à&€ØC€ØJ€Ø$€	Ø€
Ø$€Ø
�*‰*�.‰.˜Ð$9Ó
:€Ø�Z‰Z�^‰^˜L¨"Ó-€
ð	Û$Ø×Ñ×Ñ×.Ñ.Ô0ð
 @Ø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€ñ �c—h‘hÓò %�D€A€qØˆIƒ~˜!˜a™%¡# c§h¡h£-Ó/Ø—X‘X˜a !™e‘_‰
ð%ó
òò
òò6%ò,A'òHòBQ3ðh ˆzÒÙ…Fð øð[ ò 	Úð	ûð ò 	Ùð	ûð
 ò 	Úð	ús6   Á2(F ÃF)ÄF4ÆF&Æ%F&Æ)F1Æ0F1Æ4F=Æ<F=