Ë
    ¸¬uj	9  ã                   ó4  — 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
mZ dZdZeez   Zedz   ZdZdZd	Zd
ZdddedœZdZ eej0                  «      D ]k  \  ZZej7                  d«      r	  eej;                  dd«      d   «      ZŒ4edk(  sŒ:edz    eej0                  «      k  sŒS	  eej0                  edz      «      ZŒm edk\  rendZ dZ!d„ Z"d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  
ä¸œä¹¡åŒºäººæ°‘æ”¿åºœ - çŽ¯å¢ƒä¿�æŠ¤ (www.jxfzdx.gov.cn/col/col21311/index.html)
CMS: æ±‰ç½‘ hanweb / TRS ç³» (jpage datastore + xxgk/search.jsp åŠ¨æ€�åˆ—è¡¨)
åˆ—è¡¨: JS æ¸²æŸ“ loadDynamic('/module/xxgk/search.jsp', 'div7299', ...) â€” å¿…é¡» POST
      POST /module/xxgk/search.jsp
      query: texttype=&fbtime=&vc_all=&vc_filenumber=&vc_title=&vc_number=&currpage=N&sortfield=&fields=&fieldConfigId=&hasNoPages=&infoCount=
      body:  infotypeId=L00004L00004L00010&jdid=59&area=&divid=div7299&vc_title=&vc_number=&currpage=N&vc_filenumber=&vc_all=&texttype=&fbtime=
      18æ�¡/é¡µ, å…±536æ�¡/30é¡µ. è¿”å›ž <li><a href="/art/YYYY/M/D/art_21311_ID.html" title="å®Œæ•´æ ‡é¢˜">æ ‡é¢˜</a><b>YYYY-MM-DD</b></li>
      (GET è¿”å›ž 18 ç©ºè¡Œ + "è¯·ä¼ å…¥æ­£ç¡®å�‚æ•°" â€” å¿…é¡» POST)
è¯¦æƒ…: meta ArticleTitle/PubDate(YYYY-MM-DD HH:MM:SS å�–å‰�10)/ColumnName=çŽ¯å¢ƒä¿�æŠ¤
      æ­£æ–‡ div#zoom (Word è½¬æ�¢ p>span é€�æ®µ + table ä¿�ç•™ + ContentStart æ ‡è®°)
      æ— ç‹¬ç«‹é™„ä»¶åŒº (çŽ¯è¯„å…¬ç¤ºçº¯æ–‡æœ¬, é“¾æŽ¥å…¨æ˜¯å¯¼èˆª)
é    N)ÚBeautifulSoupzhttps://www.jxfzdx.gov.cnz2/col/col21311/index.html?number=L00004L00004L00010z/module/xxgk/search.jspu   ä¸œä¹¡åŒº-çŽ¯å¢ƒä¿�æŠ¤u   æ±Ÿè¥¿zcrawl_jxfzdx_hjbh.pyz/mnt/data/search.dbzkMozilla/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ÚRefereré   z--pages=ú=z--pagesÚL00004L00004L00010c                 ó  — | syt        j                  | «      } | j                  dd«      j                  dd«      j                  dd«      j                  dd«      } t        j                  dd| «      } | j                  «       S )z;unescape entities + strip zero-width + collapse whitespace.Ú u   â€‹u   â€Œu   â€�u   ï»¿ú\s+ú )Úhtml_libÚunescapeÚreplaceÚreÚsubÚstrip)Úts    ú&/root/gov_crawler/crawl_jxfzdx_hjbh.pyÚclean_titler   B   so   € áØÜ×Ñ˜!Ó€AØ	�	‰	�(˜BÓ×'Ñ'¨°"Ó5×=Ñ=¸hÈÓK×SÑSÐT\Ð^`Óa€AÜ
�‰ˆv�s˜AÓ€AØ�7‰7‹9Ðó    c                 óJ  — dd l }d }t        |«      D ]d  }	 |xs |j                  | t        |¬«      }|j                  dk(  r|j
                  xs d|_        |c S |}t        j                  d|dz   z  «       Œf t        |t        «      r|‚|S # t        $ r}|}Y d }~ŒAd }~ww xY w)Nr   )ÚheadersÚtimeoutéÈ   úutf-8g      ø?r   )ÚrequestsÚrangeÚgetÚHEADERSÚstatus_codeÚapparent_encodingÚencodingÚ	ExceptionÚtimeÚsleepÚ
isinstance)	ÚurlÚsessionr   Úretriesr   ÚlastÚiÚrÚes	            r   Úfetchr.   L   s©   € ÛØ€DÜ�7‹^ò 	"ˆð	ØÒ$˜H×)Ñ)¨#´wÈÐ)ÓPˆAØ�}‰} Ò#Ø×0Ñ0Ò;°G�”
Ø’ØˆDô 	�
‰
�3˜!˜a™%‘=Õ!ð	"ô �$œ	Ô"Øˆ
Ø€Køô ò 	Ø�Dûð	ús   –ABÁBÂ	B"ÂBÂB"c                 óª  — d|› d�}dt         › d|› d�}t        t        «      }d|d<   | j                  t        dz   |z   ||d	¬
«      }|j
                  xs d|_        |j                  }t        j                  d|«      }|rt        |j                  d«      «      nd}t        j                  d|«      }|rt        |j                  d«      «      nd}	|||	fS )u"  POST search.jsp for a given page. Returns (html, total_count, total_pages).
    âš ï¸� requests ä¼ å­—ç¬¦ä¸² body ä¸�è‡ªåŠ¨è®¾ Content-Type â€” å¿…é¡»æ˜¾å¼�
    application/x-www-form-urlencodedï¼Œå�¦åˆ™æœ�åŠ¡å™¨è¿”å›žã€Œè¯·ä¼ å…¥æ­£ç¡®å�‚æ•°ï¼�ã€�(curl -d è‡ªåŠ¨å¸¦æ‰€ä»¥ curl å�¯ç”¨)
    zGtexttype=&fbtime=&vc_all=&vc_filenumber=&vc_title=&vc_number=&currpage=z9&sortfield=&fields=&fieldConfigId=&hasNoPages=&infoCount=zinfotypeId=z;&jdid=59&area=&divid=div7299&vc_title=&vc_number=&currpage=z)&vc_filenumber=&vc_all=&texttype=&fbtime=z!application/x-www-form-urlencodedzContent-Typeú?é   )Údatar   r   r   u   å…±(\d+)æ�¡è®°å½•r   r   u   å…±\s*(\d+)\s*é¡µ)ÚINFOTYPE_IDÚdictr   ÚpostÚ
SEARCH_APIr!   r"   Útextr   ÚsearchÚintÚgroup)
r(   ÚpageÚqÚbodyÚhr,   r7   ÚmÚtotalÚtotal_pagess
             r   Ú
fetch_listrB   ^   sÚ   € ð
Ø�VÐTð
V€Aàœ+˜ð 'Ø˜ÐGðI€DäŒW‹€AØ;€A€nÑØ�‰”Z #Ñ%¨Ñ)°¸aÈˆÓL€AØ×$Ñ$Ò/¨€A„JØ�6‰6€DÜ
�	‰	Ð&¨Ó-€AÙ ŒC�—‘˜“
ŒO a€EÜ
�	‰	Ð&¨Ó-€AÙ%&”#�a—g‘g˜a“j”/¨A€KØ�˜Ð#Ð#r   c           
      óÀ	  ‡‡‡‡— | sddg fS t        j                  dd| t         j                  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } t        rQ	 t	        | d«      }|j                  d«      D ]%  }d	D ]  }|j                  j                  |d
«       Œ  Œ' t        |«      } | }t        j                  dd|t         j                  ¬«      }g Ši Šˆˆˆfd„}t        j                  d||t         j                  t         j                  z  ¬«      }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                  dd|t         j                  ¬«      }g }	|j                  d«      D ]ï  }
|
j                  «       }|sŒt        j                  dd|«      }t        j                  |«      }|j                  dd«      j                  dd«      }t        j                  dd|«      }|sŒ~‰j!                  «       D ]  \  }}|j                  ||«      }Œ t#        ‰«      D ]  \  }}|j                  d|› d�|«      }Œ |	j%                  |j                  «       «       Œñ dj'                  |	«      }‰j!                  «       D ]  \  }}|j                  ||«      }Œ t#        ‰«      D ]  \  }}|j                  d|› d�|«      }Œ t        j                  dd|«      }t        j                  d d|«      }t        j                  |«      }t        j                  d!d|«      }t        j                  d"d|«      }t        j                  d#d|«      }t)        «       }g }|j                  d«      D ]X  }t        j                  d$dt        j                  dd|«      «      }|sŒ2||v rŒ7|j+                  |«       |j%                  |«       ŒZ dj'                  |«      j                  «       }||‰fS # t        $ r Y �Œâw xY w)%zàConvert article-body inner HTML to stored format:
    - keep <table> HTML intact
    - 

 between <p> blocks
    - attachment <a> links embedded with absolute URL
    - strip <script>/<style>/noise + style attrs via BS4
    r
   r   z
<!--.*?-->)Úflagsz<script[^>]*>.*?</script>z<style[^>]*>.*?</style>úhtml.parserT)ÚstyleÚclassÚlangÚdirÚalignÚvalignÚwidthÚheightÚborderÚcellpaddingÚcellspacingNz;<img[^>]*src="[^"]*fileTypeImages/icon_[a-z]+\.gif"[^>]*/?>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
   u   ^é™„ä»¶[:ï¼š]\s*r0   r   u   é™„ä»¶Ú__LINK__Ú__z	<a href="z" target="_blank">z</a>)r:   r   r   r   r   r   ÚosÚpathÚbasenameÚsplitÚurllibÚparseÚurljoinÚappendÚlen)	r?   ÚhrefÚ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˜>Ô*Øœ˜\Ó*Ð+¨2Ð.ˆØ'¨ yÐ0BÀ3À%ÀtÐLˆ�SÑØˆ
r   z&<a\s[^>]*href="([^"]+)"[^>]*>(.*?)</a>c                 óh   •— ‰j                  | j                  d«      «       dt        ‰«      dz
  › d�S )Nr   Ú__TBL__r   rU   )r]   r:   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</p>

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

rS   õ   Â r   z&nbsp;z[\s\u200b\u200c\u200d\ufeff]+ri   rU   z__LINK__\d+__z__TBL__\d+__z[ \t]+\nz\n{3,}z	[ \t]{2,}r   )r   r   ÚSÚIr   Úfind_allÚattrsÚpopÚstrr#   r8   rY   r   r   r   r   ÚitemsÚ	enumerater]   ÚjoinÚsetÚadd)Úcontentrf   Ú_soupÚtagÚattrÚcontent2rg   rk   Ú	has_tableÚpartsÚblockÚbÚplainÚkÚvr+   ÚtblÚoutÚseenÚfinalÚprc   rd   re   rj   s    `                    @@@r   Úhtml_to_textrŠ   s   s1  û€ ñ Ø�1�bˆyÐÜ�f‰f�] B¨´r·t±tÔ<€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åð	Ü! '¨=Ó9ˆEØ—~‘~ dÓ+ò .�ð Lò .�DØ—I‘I—M‘M $¨Õ-ñ.ð.ô ˜%“jˆGð €HÜ�v‰vØFÈÈHÜ�d‰dô€Hð €KØ€Löô �v‰vÐ?ÀÈXÔ]_×]aÑ]aÔdf×dhÑdhÑ]hÔi€Hð €Mô2ô �v‰vÐ0°)¸XÌRÏTÉTÔTV×TXÑTXÉ[ÔY€HÜ—Y‘Y˜°¼¿¹Ô>‘ÀA€Iä�v‰v�g˜z¨8¼2¿4¹4Ô@€HÜ�v‰v�l D¨(¼"¿$¹$Ô?€HÜ�v‰vÐAÀ2ÀxÔWY×W[ÑW[Ô\€Hà€EØ—‘ Ó'ò  ˆØ�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Ü
�&‰&�˜d CÓ
(€CÜ
�&‰&�˜F CÓ
(€CÜ
�&‰&�˜s CÓ
(€Cô ‹5€DØ€EØ�Y‰Y�vÓò ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÙØØ�$‰;ØØ�‰�ŒØ�‰�Q�ðð �+‰+�eÓ
×
"Ñ
"Ó
$€Cà�	˜;Ð&Ð&øôg ò 	Úð	ús   Â*AS Ó	SÓSc           	      ó¬  — g }t         �r"t        | d«      }|j                  d«      D �]  }|j                  dd¬«      }|sŒ|j                  dd«      j	                  «       }t        j                  d|«      sŒQt        j                  j                  t        |«      }t        |j                  d	d«      xs |j                  d
d¬«      «      }d}|j                  d«      }	|	rt        |	j                  d
d¬«      «      }t        j                  d|«      sd}|j                  |||f«       �Œ |s¦t        j                  d| t
        j                   «      D ]~  }
t        j                  j                  t        |
j#                  d«      «      }|j                  |t        |
j#                  d«      «      |
j#                  d«      j	                  «       f«       Œ€ |S )u¼   Extract (url, title, date) from search.jsp POST response.
    <li><a target="_blank" href="/art/2026/7/30/art_21311_4465839.html" title="å®Œæ•´æ ‡é¢˜">æ ‡é¢˜</a><b>2026-07-30</b></li>
    rE   ÚliÚaT)r_   r_   r
   z'/art/\d{4}/\d+/\d+/art_21311_\d+\.html$Útitler   )r   r�   z^20\d{2}-\d{2}-\d{2}$zo<a[^>]+href="(/art/\d{4}/\d+/\d+/art_21311_\d+\.html)"[^>]*title="([^"]*)"[^>]*>(.*?)</a>\s*<b[^>]*>([^<]*)</b>r   rR   é   )r   rp   Úfindr   r   r   r8   rZ   r[   r\   ÚBASE_URLr   Úget_textÚmatchr]   Úfinditerrn   r:   )Ú	html_textrt   ÚsouprŒ   r�   r_   rb   rŽ   Údater�   r?   s              r   Ú
parse_listr˜   Ý   s†  € ð €EÞÜ˜Y¨Ó6ˆØ—-‘- Ó%ó 	1ˆBØ—‘˜ $�Ó'ˆAÙØØ—5‘5˜ Ó$×*Ñ*Ó,ˆDÜ—9‘9ÐGÈÔNØÜ—l‘l×*Ñ*¬8°TÓ:ˆGÜ §¡ g¨rÓ 2Ò Q°a·j±jÀÈD°jÓ6QÓRˆEØˆDØ—‘˜“ˆAÙÜ" 1§:¡:¨c¸ :Ó#>Ó?�Ü—8‘8Ð4°dÔ;Ø�Ø�L‰L˜' 5¨$Ð/Ö0ð	1ñ  ä—‘Ø~Ø”r—t‘tó
ò 	QˆAô —l‘l×*Ñ*¬8°Q·W±W¸Q³ZÓ@ˆGØ�L‰L˜'¤;¨q¯w©w°q«zÓ#:¸A¿G¹GÀA»J×<LÑ<LÓ<NÐOÕPð	Qð €Lr   c                 óè  — d}d}d}t         �r,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¬«      }|rM|j                  d«      r<|d   j                  «       }t        j                  d	|«      }	|	r|	j                  d
«      }|j                  dt        j                  dt        j                  «      ¬«      }
|
rt        |
«      }|r|s±t        j                  d| t        j                  «      }|rt        |j                  d«      «      }t        j                  d| t        j                  «      }|r|j                  d«      }t        j                  d| t        j                  «      }|r|j                  d
«      }|||fS )z.Extract title, date, content from detail page.r
   rE   ÚmetaÚnameÚArticleTitle)rq   ry   ÚPubDatez(\d{4})-(\d{2})-(\d{2})r   ÚdivÚzoom)Úidz5<meta\s+name="\s*ArticleTitle\s*"\s+content="([^"]*)"r   z;<meta\s+name="\s*PubDate\s*"\s+content="(\d{4}-\d{2}-\d{2})z#<div[^>]*id="zoom"[^>]*>(.*?)</div>)r   r�   r   Úcompilero   r   r   r   r“   r:   rs   r8   rn   )r•   rf   rŽ   r—   Úcontent_htmlr–   ÚmtÚmdÚdÚdmrŸ   r?   s               r   Úparse_detailr§   ÿ   sŠ  € à€EØ€DØ€LÞÜ˜Y¨Ó6ˆØ�Y‰Y�v f¬b¯j©j¸Ì"Ï$É$Ó.OÐ%PˆYÓQˆÙ�"—&‘&˜Ô#Ü  9¡Ó.ˆEØ�Y‰Y�v f¬b¯j©j¸ÄRÇTÁTÓ.JÐ%KˆYÓLˆÙ�"—&‘&˜Ô#Ø�9‘×#Ñ#Ó%ˆAÜ—‘Ð4°aÓ8ˆBÙØ—x‘x “{�Ø�y‰y˜¤2§:¡:¨g´r·t±tÓ#<ˆyÓ=ˆÙÜ˜t›9ˆLÙ™Ü�I‰IÐNÐPYÔ[]×[_Ñ[_Ó`ˆÙÜ §¡¨£
Ó+ˆEÜ�I‰IÐTÐV_Ôac×aeÑaeÓfˆÙØ—7‘7˜1“:ˆDÜ�I‰IÐ<¸iÌÏÉÓNˆÙØŸ7™7 1›:ˆLØ�$˜Ð$Ð$r   c                 ó”  — | j                  d|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)Nz'SELECT id FROM gov_raw WHERE page_url=?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 (?,?,?,?,?,?,?,?,?,?)rS   r
   r   r   r   zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)TÚlockedé   )ÚexecuteÚfetchoneÚcrawler_librª   r#   Ú	SITE_NAMEÚ
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr   r   r   r   r   Ú	lastrowidÚsqlite3ÚOperationalErrorrs   r$   r%   Ústore_record)Úconnr'   rŽ   ry   r—   r~   ÚcurÚindustryrª   Úsummaryr-   s              r   r·   r·     sF  € Ø
�,‰,Ø1Ø	ˆó€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   ¦C7 ©C( ·B/C7 Ã(	C4Ã1C7 Ã3C4Ã4C7 Ã7EÄ
1EÄ;EÅEÅEc                  ó|  — dd l } | j                  «       }|j                  j                  t        «       t        j                  t        d¬«      }|j                  d«       |j                  d«       d}d}t        «       }t        dt        dz   «      D �]y  }	 t        ||«      \  }}}	t        |«      }t        d|› dt!        |«      › d|› d|	› d�	d	¬
«       |s|dkD  rt        dd	¬
«        �n#|D �]  \  }}}||v rŒ|j#                  |«       	 t%        ||¬«      }|j&                  j)                  dd¬«      }t+        ||«      \  }}}|s|}|s|}t-        ||«      \  }}}t!        t/        j0                  dd|«      j3                  «       «      }|dk  rt        d|d d › �d	¬
«       |dz  }Œ½t5        ||||||«      }|r|dz  }t        d|d d › d|› d�d	¬
«       n|dz  }t7        j8                  d«       �Œ t7        j8                  d«       �Œ| |j;                  «        |j=                  «        t        d |› �d	¬
«       t        d!|› �d	¬
«       t        d"t>        › d#�d	¬
«       y # t        $ r}
t        d|› d|
› �d	¬
«       Y d }
~
 Œxd }
~
ww xY w# t        $ r#}
t        d|› d|
› �d	¬
«       |dz  }Y d }
~
�ŒÈd }
~
ww xY w)$Nr   é<   )r   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALr   zPage z fetch error: T)Úflushz: found z items (total=z, pages=ú)zEmpty page, stop pagination)r(   r   r   )Úerrorsz  detail error z: rS   r
   é
   z  skip empty: r1   z  + é(   z (g333333Ó?g      à?u   æ–°å¢ž: u   è·³è¿‡: z=== z	 done ===) r   ÚSessionr   Úupdater   rµ   ÚconnectÚDB_PATHr­   rw   r   Ú_PAGESrB   r#   Úprintr˜   r^   rx   r.   ry   Údecoder§   rŠ   r   r   r   r·   r$   r%   ÚcommitÚcloser°   )r   Úsr¸   Ú	new_countÚ
skip_countÚ	seen_urlsr;   r•   r@   rA   r-   rt   rb   rŽ   r—   r,   ÚdhtmlÚdtitleÚddater¢   ry   r~   Ú_Ú	plain_lenÚoks                            r   ÚmainrÖ   D  sÅ  € ÛØ×ÑÓ€AØ‡I�I×Ñ”WÔÜ�?‰?œ7¨BÔ/€DØ‡L�LÐ,Ô-Ø‡L�LÐ*Ô+à€IØ€JÜ“€Iä�aœ !™Ó$ó (ˆð	Ü,6°q¸$Ó,?Ñ)ˆI�u˜kô ˜9Ó%ˆÜ��d�V˜8¤C¨£J <¨~¸e¸WÀHÈ[ÈMÐYZÐ[ÐcgÕhÙ˜ šÜÐ/°tÕ<ÚØ$)ó 	Ñ ˆG�U˜DØ˜)Ñ#ØØ�M‰M˜'Ô"ðÜ˜'¨1Ô-�ØŸ	™	×(Ñ(¨¸Ð(ÓC�ô
 +7°u¸gÓ*FÑ'ˆF�E˜<ÙØ�ÙØ�Ü$0°¸wÓ$GÑ!ˆG�Y ÜœBŸF™F :¨r°7Ó;×AÑAÓCÓDˆIØ˜2Š~Ü˜ v¨c¨r { mÐ4¸DÕAØ˜a‘�
ØÜ˜d G¨V°W¸eÀYÓOˆBÙØ˜Q‘�	Ü˜˜V C R˜[˜M¨¨E¨7°!Ð4¸DÖAà˜a‘�
Ü�J‰J�sŽOð9	ô: 	�
‰
�3ŽðQ(ðT 	‡K�K„MØ‡J�J„LÜ	ˆH�Y�KÐ
 ¨Õ-Ü	ˆH�Z�LÐ
!¨Õ.Ü	ˆD”�˜9Ð
%¨TÖ2øôW ò 	Ü�E˜$˜˜~¨a¨SÐ1¸Õ>Ýûð	ûô ò Ü˜¨ y°°1°#Ð6¸dÕCØ˜a‘�
Ýûðús0   ÂI%Ä*JÉ%	JÉ.JÊJÊ	J;ÊJ6Ê6J;Ú__main__)Nr1   r¬   )+Ú__doc__ÚsysrV   r   r$   Úhtmlr   Úurllib.parserZ   rµ   Úbs4r   ÚImportErrorr‘   Ú	LIST_PATHÚLIST_URLr6   r°   r±   r²   rÆ   r   Ú
_MAX_PAGESru   Úargvr+   r�   Ú
startswithr9   rY   Ú
ValueErrorr^   rÇ   r3   r   r.   rB   rŠ   r˜   r§   r·   rÖ   Ú__name__© r   r   ú<module>ræ      s‹  ðñó Û 	Û 	Û Û Û Û ðÝ!ð
 '€Ø@€	Ø�iÑ€ØÐ1Ñ1€
Ø$€	Ø€
Ø$€Ø
€ð @Ø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€à"€òóò$$ò*g'òTòD%ò@"òJ:3ðz ˆzÒÙ…Fð øðO ò Ø‚Mðûð4 ò 	Ùð	ûð
 ò 	Ùð	ús5    C7 Á/DÂ+DÃ7DÄ DÄDÄDÄDÄD